有没有办法加速这个文件I/O代码?

Mus*_*sis 16 objective-c ios

在我的应用程序中,我有大约300个NSData大小为0.5 MB的对象,我将它们全部按顺序编写到一个文件中,基本上是这个代码(写入一个0.5 MB的对象300次):

- (void)createFile {

    // create .5 MB block to write
    int size = 500000;
    Byte *bytes = malloc(size);
    for (int i = 0; i < size; i++) {
        bytes[i] = 42;
    }
    NSData *data = [NSData dataWithBytesNoCopy:bytes length:size 
       freeWhenDone:YES];

    // temp output file
    NSUUID *uuid = [NSUUID UUID];
    NSString *path = [[NSTemporaryDirectory() 
        stringByAppendingPathComponent:[uuid UUIDString]] 
        stringByAppendingPathExtension:@"dat"];
    NSOutputStream *outputStream = [[NSOutputStream alloc] 
        initToFileAtPath:path append:NO];
    [outputStream open];

    double startTime = CACurrentMediaTime();

    NSInteger totalBytesWritten;
    NSInteger bytesWritten;
    Byte *readPtr;

    for (int i = 0; i < 300; i++) {

        // reset read pointer to block we're writing to the output
        readPtr = (Byte *)[data bytes];
        totalBytesWritten = 0;

        // write the block
        while (totalBytesWritten < size) {
            bytesWritten = [outputStream write:readPtr maxLength:size 
                - totalBytesWritten];
            readPtr += bytesWritten;
            totalBytesWritten += bytesWritten;
        }

    }

    double duration = CACurrentMediaTime() - startTime;
    NSLog(@"duration = %f", duration);

    [outputStream close];

}
Run Code Online (Sandbox Code Playgroud)

在我的iPod(第5代)和我的iPhone 6上,这个过程大约需要3秒钟,我想知道是否有更快的方法来做到这一点.我尝试过使用NSFileManagerNSFileHandle接近,但它们花费的时间大致相同,这使我认为这是我遇到的基本I/O限制.

有没有办法更快地执行此操作(此代码应在任何设备上编译和运行)?

std*_*nis 2

150MB 数据的 300 * 0.5 / 3 = 50MB/s 看起来足够快。我想您已经达到了闪存写入速度限制。我相信您在后台线程中运行此代码,因此问题不在于 UI 阻塞