今天测试多线程异步处理数据,发现程序很容易崩溃掉。主要原因事在异步的时候加载数据,加载的总数据量远远大于本身内存导致的。所以搜索找到一些关注内存占用的代码,以后在处理多线程的时候可能用到条件锁,防止爆内存情况
代码如下:
#include<windows.h>
BOOL CheckResource()
{
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
double AvailMemory = (double)statex.ullAvailPhys / 1024 / 1024 / 1024;//得到可用内存容量,单位G
double AllMemory = (double)statex.ullTotalPhys / 1024 / 1024 / 1024;//得到的是总内存,单位G
//if (statex.ullTotalPhys / 1024 / 1024 / 1024 < 8)
if (AvailMemory < 8)
{
::MessageBox(NULL, "可用内存小于 8G", "提示", MB_ICONWARNING);
return 0;
}
if (statex.ullAvailPhys / 1024 / 1024 / 1024 < 1) {
::MessageBox(NULL, "物理有效内存小于 1G", "提示", MB_ICONWARNING);
return 0;
}
ULARGE_INTEGER lpFreeBytesAvailable;
ULARGE_INTEGER lpTotalNumberOfBytes;
ULARGE_INTEGER lpTotalNumberOfFreeBytes;
GetDiskFreeSpaceEx(NULL, &lpFreeBytesAvailable, &lpTotalNumberOfBytes, &lpTotalNumberOfFreeBytes);
if (lpTotalNumberOfFreeBytes.QuadPart / 1024 / 1024 / 1024 < 50) {
::MessageBox(NULL, "磁盘有效空间小于 50G", "提示", MB_ICONWARNING);
return 0;
}
return TRUE;
}
int main()
{
return CheckResource();
}
通过调试发现,可用内存:5.436G,总内存:15.8713G。与任务管理器显示一致,测试成功