在开发pc端软件的过程中发现,系统的可用内存直线下降,直至几十M,甚至更低。
跟踪发现,问题出在CreateFile的文件标志。
写了一个测试程序,如下:
#include
#include
#include
int main()
{
HANDLE h_file=CreateFile("e:\\uvideo\\2008-07-08-15-31-24_o.h264",
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_FLAG_RANDOM_ACCESS,//todo: sequential access
0);
//FILE_FLAG_NO_BUFFERING,
if(h_file==INVALID_HANDLE_VALUE)
return 0;
char *buff=(char*)malloc(1000*1024);
DWORD read_size=0;
while(1)
{
ReadFile(h_file,buff,1000*1024,&read_size,NULL);
if(read_size!=1000*1024)
break;
Sleep(10);
}
return 0;
}
在运行过程中,系统可用物理内存一直减少,最少到几M,后来将FILE_FLAG_RANDOM_ACCESS标志改为FILE_FLAG_NO_BUFFERING问题解决。
以FILE_FLAG_RANDOM_ACCESS标志打开文件时,系统使用了较多的缓存。
阅读(3008) | 评论(0) | 转发(0) |