lnhv013710 2019-04-13 09:22 采纳率: 96.7%
浏览 452
已采纳

MFC Csdudiofile::WriteString() Close() 写硬盘的时刻

int nCount=pArrayList.GetCount();//pArrayList存的文件内修改位置和要改的内容
file.Open(path, CFile::modeReadWrite);//读写模式打开文件
for (int i=0;i<nCount;i++)//循环对整个文件的标记位置替换
{
int nPos= pArrayList[i].nStartPos;
file.Seek(nPos, CFile::begin);
CString strWriText=pArrayList[i].strTrac;
file.WriteString(strWriText);//A
}
file.Close();//B
}

上面一段代码,请教A处的WriteString是写的内存还是写的硬盘,担心for循环对硬盘的频繁写操作。另外,是不是B处的Close才真正将已经更改好的内存中的文件写到硬盘???
  • 写回答

2条回答 默认 最新

  • threenewbee 2019-04-13 09:30
    关注

    WriteString从你的程序的角度看是写硬盘,但是操作系统甚至硬盘本身都有缓存机制(一块1TB的机械硬盘,通常有64MB的缓存,而操作系统甚至可以用1GB或者更多的可用内存充当缓存,当你读写文件的时候,这些缓存会使得读写尽可能少,缓存的运作机制是对程序来说透明的,你只是感觉硬盘操作更快),在相当程度上缓解了频繁写操作对性能的影响,而且对于现在的固态硬盘,小文件的读写性能已经比机械硬盘好太多了。

    B处的Close才真正将已经更改好的内存中的文件写到硬盘
    因为缓存的存在,这不一定,Close只是关闭文件句柄。如果你希望验证这一点,那么向硬盘写入10GB的数据(超过你的物理内存的上限,这时缓存就肯定失效了)。然后在Close后面加上一个MessageBox,你可以看到程序运行到了Close,把你的耳朵靠近硬盘。你会发现,Close之后,硬盘还在响

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?