现在存一次,打开关闭文件各一次。
据说双缓冲存储文件可以提高速度,我想咨询下这个该怎么个弄法,谢谢!
6 个解决方案
#1
双缓冲是指除了系统提供的缓冲外,由程序员自建一道缓冲。在图形显示方面有普遍应用。
对于楼主的问题,可以作如下两种考虑:
1、如果内存足够,就使用内存做缓冲区。不必每次都操作文件,将数据存在内存中,经过充分长的时间后再操作一次文件;
2、如果内存不够,可以使用文件做缓冲区。不必每次都操作目标文件,将数据存在多个小文件中,经过充分长的时间后再合并保存在目标文件中。
当然,采用双缓冲时,都要考虑文件数据的一致性和完整性。如果在过程中需要读取文件内容,那么也要通过缓冲(当程序可以控制这种读取时)或及时更新文件(当程序无法控制这种读取时)。
对于楼主的问题,可以作如下两种考虑:
1、如果内存足够,就使用内存做缓冲区。不必每次都操作文件,将数据存在内存中,经过充分长的时间后再操作一次文件;
2、如果内存不够,可以使用文件做缓冲区。不必每次都操作目标文件,将数据存在多个小文件中,经过充分长的时间后再合并保存在目标文件中。
当然,采用双缓冲时,都要考虑文件数据的一致性和完整性。如果在过程中需要读取文件内容,那么也要通过缓冲(当程序可以控制这种读取时)或及时更新文件(当程序无法控制这种读取时)。
#2
up,学习
#3
up楼上
如果内存足够
可以考虑文件的内存映射
这显然比你频繁打开/关闭文件效率高多了
如果内存足够
可以考虑文件的内存映射
这显然比你频繁打开/关闭文件效率高多了
#5
用文件映射
第1步:HANDLE CreateFile(
PCSTR pszFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
PSECURITY_ATTRIBUTES psa,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
创建或打开一个文件内核对象,总是要调用C r e a t e F i l e函数:
第2步:
HANDLE CreateFileMapping(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD fdwProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
PCTSTR pszName);
调用C r e a t e F i l e函数,就可以将文件映像的物理存储器的位置告诉操作系统。你传递的路径名用于指明支持文件映像的物理存储器在磁盘(或网络或光盘)上的确切位置。
第3步:
PVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap);
文件数据映射到进程的地址空间
第4步:程序结束,销毁资源
BOOL UnmapViewOfFile(PVOID pvBaseAddress);
从进程的地址空间中撤消文件数据的映像
第1步:HANDLE CreateFile(
PCSTR pszFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
PSECURITY_ATTRIBUTES psa,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
创建或打开一个文件内核对象,总是要调用C r e a t e F i l e函数:
第2步:
HANDLE CreateFileMapping(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD fdwProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
PCTSTR pszName);
调用C r e a t e F i l e函数,就可以将文件映像的物理存储器的位置告诉操作系统。你传递的路径名用于指明支持文件映像的物理存储器在磁盘(或网络或光盘)上的确切位置。
第3步:
PVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap);
文件数据映射到进程的地址空间
第4步:程序结束,销毁资源
BOOL UnmapViewOfFile(PVOID pvBaseAddress);
从进程的地址空间中撤消文件数据的映像
#6
mark......
#1
双缓冲是指除了系统提供的缓冲外,由程序员自建一道缓冲。在图形显示方面有普遍应用。
对于楼主的问题,可以作如下两种考虑:
1、如果内存足够,就使用内存做缓冲区。不必每次都操作文件,将数据存在内存中,经过充分长的时间后再操作一次文件;
2、如果内存不够,可以使用文件做缓冲区。不必每次都操作目标文件,将数据存在多个小文件中,经过充分长的时间后再合并保存在目标文件中。
当然,采用双缓冲时,都要考虑文件数据的一致性和完整性。如果在过程中需要读取文件内容,那么也要通过缓冲(当程序可以控制这种读取时)或及时更新文件(当程序无法控制这种读取时)。
对于楼主的问题,可以作如下两种考虑:
1、如果内存足够,就使用内存做缓冲区。不必每次都操作文件,将数据存在内存中,经过充分长的时间后再操作一次文件;
2、如果内存不够,可以使用文件做缓冲区。不必每次都操作目标文件,将数据存在多个小文件中,经过充分长的时间后再合并保存在目标文件中。
当然,采用双缓冲时,都要考虑文件数据的一致性和完整性。如果在过程中需要读取文件内容,那么也要通过缓冲(当程序可以控制这种读取时)或及时更新文件(当程序无法控制这种读取时)。
#2
up,学习
#3
up楼上
如果内存足够
可以考虑文件的内存映射
这显然比你频繁打开/关闭文件效率高多了
如果内存足够
可以考虑文件的内存映射
这显然比你频繁打开/关闭文件效率高多了
#4
#5
用文件映射
第1步:HANDLE CreateFile(
PCSTR pszFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
PSECURITY_ATTRIBUTES psa,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
创建或打开一个文件内核对象,总是要调用C r e a t e F i l e函数:
第2步:
HANDLE CreateFileMapping(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD fdwProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
PCTSTR pszName);
调用C r e a t e F i l e函数,就可以将文件映像的物理存储器的位置告诉操作系统。你传递的路径名用于指明支持文件映像的物理存储器在磁盘(或网络或光盘)上的确切位置。
第3步:
PVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap);
文件数据映射到进程的地址空间
第4步:程序结束,销毁资源
BOOL UnmapViewOfFile(PVOID pvBaseAddress);
从进程的地址空间中撤消文件数据的映像
第1步:HANDLE CreateFile(
PCSTR pszFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
PSECURITY_ATTRIBUTES psa,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
创建或打开一个文件内核对象,总是要调用C r e a t e F i l e函数:
第2步:
HANDLE CreateFileMapping(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD fdwProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
PCTSTR pszName);
调用C r e a t e F i l e函数,就可以将文件映像的物理存储器的位置告诉操作系统。你传递的路径名用于指明支持文件映像的物理存储器在磁盘(或网络或光盘)上的确切位置。
第3步:
PVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap);
文件数据映射到进程的地址空间
第4步:程序结束,销毁资源
BOOL UnmapViewOfFile(PVOID pvBaseAddress);
从进程的地址空间中撤消文件数据的映像
#6
mark......