开发者社区> 问答> 正文

ios按行读取一个50M的文件,再对每行数据进行存储,请问如何降低运行内存?

float *squareVertexData;
    int faceNum;

//文件路径
    const char* destDir = [fileName UTF8String];//将NSString转为char *字符串
   
    ifstream inSTL;
    string fp  = destDir;
    destDir = nil;
    inSTL.open(fp);
    //定义一个vector容器,用于存储float数组
    vector<float>vec;
    
    while(!inSTL.eof())
    {

        string line;
        getline(inSTL, line);
        //将处理后需要的东西存入Vector容器
        vec.push_back(line.substr(1, 2));//这段代码为举例
     }

上述代码运行过程中运行内存会达到330M左右,请问怎么解决?
有朋友说分段去读取文件,比如每3m读取一次存起来,再读下3M,思路明白,但不知道怎么操作(c++基础不好,惭愧)

展开
收起
杨冬芳 2016-05-27 13:59:55 3349 0
1 条回答
写回答
取消 提交回答
  • IT从业

    不多说,代码如下:

    NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
    NSInteger count = 0;
    NSInteger  dataLength = 1024*1024;
    NSData *data = [fileHandle readDataOfLength:dataLength];
    
    while (YES) {
        [fileHandle seekToFileOffset:count*dataLength];
        data = [fileHandle readDataOfLength:dataLength];
        
        if (!data||[data length]<=0) {
            break;
        }
        
        //do things with data,for example:
        [self uploadPartialData:data];
        count++;
    }
    
    [fileHandle closeFile];`
    2019-07-17 19:17:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
滴滴出行iOS端瘦身实践 立即下载
手淘iOS性能优化探索 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载