MFC读取跟存储大文件
MFC读取和存储大文件
我用VS2010 MFC写了一个工具,从一个文件1中读取数据,放到另外一个文件2中。当文件1中的数据比较少时,程序执行,当文件达到几M的时候,程序就不能响应了,不能进行读取了。需要怎么做,可以读取相对比较大的数据,几十M,几百M。。
------解决思路----------------------
按帧读取,一帧大小可以调试决定要多大,然后边从文件1读取,边往文件2中存放! 而不是一次性读取,一次性写入!
------解决思路----------------------
可以用内存映射文件进行读取,把硬盘当内存用。
------解决思路----------------------
对CString的数据进行处理
==千万不要对大字符串使用CString进行处理!CString只能用来处理短字符串,因为它封装了大量的内存操作,Left,Right,Mid等函数非常耗时,每次都要重新申请内存进行内存复制。
==大字符串处理,请直接用指针,通过指针移动来截取,效率最高!
------解决思路----------------------
栈里面,不是慢是会溢出,应该放在堆里面,也就是new出来的。
直接
unique_ptr<TCHAR[]> m_pBuf(new TCHAR[20480]);
我用VS2010 MFC写了一个工具,从一个文件1中读取数据,放到另外一个文件2中。当文件1中的数据比较少时,程序执行,当文件达到几M的时候,程序就不能响应了,不能进行读取了。需要怎么做,可以读取相对比较大的数据,几十M,几百M。。
------解决思路----------------------
按帧读取,一帧大小可以调试决定要多大,然后边从文件1读取,边往文件2中存放! 而不是一次性读取,一次性写入!
------解决思路----------------------
可以用内存映射文件进行读取,把硬盘当内存用。
------解决思路----------------------
对CString的数据进行处理
==千万不要对大字符串使用CString进行处理!CString只能用来处理短字符串,因为它封装了大量的内存操作,Left,Right,Mid等函数非常耗时,每次都要重新申请内存进行内存复制。
==大字符串处理,请直接用指针,通过指针移动来截取,效率最高!
------解决思路----------------------
栈里面,不是慢是会溢出,应该放在堆里面,也就是new出来的。
直接
unique_ptr<TCHAR[]> m_pBuf(new TCHAR[20480]);