DWORD WINAPI ASyncCyclingPlayPhotosThread(LPVOID lpVoid)
{
return 0;
}
void CVisualIntercomDlg::OnBnClickedBtnGuard()
{
MEMORYSTATUS mem_stat;
DWORD dwThreadID;
BOOL r;
CString memory = L"可用内存";
// 测试
for(int i=0;i<100;i++)
{
HANDLE m_hASyncThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ASyncCyclingPlayPhotosThread, (LPVOID)this, 0, &dwThreadID);
WaitForSingleObject(m_hASyncThreadHandle,5000);
if(m_hASyncThreadHandle)
{
r = CloseHandle(m_hASyncThreadHandle);
}
memset(&mem_stat,0,sizeof(MEMORYSTATUS));
mem_stat.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&mem_stat);
CString s;
s.Format(L",%d", mem_stat.dwAvailPhys/1024);
memory += s;
}
14 个解决方案
#1
每次内存减少,是如何测的?LZ怎么就确定是以4K为单位减少的。。。?
#2
UP
#3
memset(&mem_stat,0,sizeof(MEMORYSTATUS));
mem_stat.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&mem_stat);
CString s;
s.Format(L",%d", mem_stat.dwAvailPhys/1024);
这段代码不就是看内存的嘛,每次创建完线程,并且结束线程之后,我都查看了。当然不是每次都看,而是把每次的剩余内存写到字符串里面,循环100次之后看的。
#4
1. 你把代码精简下测测.
2. 使用release模式测试.
2. 使用release模式测试.
#5
这代码还如何精简,我都只保留了最少的。
#6
内存泄露都是由于应该释放的内存没有释放导致的,可以往这方面考虑考虑…
#7
仔细看下代码吧,这里有动态分配内存?
#8
你确定你的代码就这么一点点? 我觉得这段代码没有任何问题.
#9
我的代码有很多,肯定不可能说创建一个空线程,这没意义嘛。只是我为了定位问题,把代码都去掉了。这段代码我试了很多次,运行一次,内存就少一点,但是少一定数量之后就稳定了。大概100多K吧
#10
mark。。。这个是个问题。我倒是没检测我的内存使用。。。
不过没有像LZ那么多次100次。每次等5秒的定值。。。我都是等待有信号来了在做。每次做多10次就出来
关注一下。。。
不过没有像LZ那么多次100次。每次等5秒的定值。。。我都是等待有信号来了在做。每次做多10次就出来
关注一下。。。
#11
从代码本身看不到什么问题,建议lz
1.排查一下是不是其他系统中的程序影响了这个线程
2.测试1万次看一下结果是什么
1.排查一下是不是其他系统中的程序影响了这个线程
2.测试1万次看一下结果是什么
#12
CString 的 operator +=?
LZ 确定它不会增加 memroy 的使用??
Paul, Chao @ Techware
#13
把CString s;移到for循环外面再试试。
#14
它确实会增加内存,但是不会几次就增加4K,或者8K,确定不是因为它的原因。因为用固定的数组来存放每次的内存,还是可以看到减少的。用字符串是方便显示
#1
每次内存减少,是如何测的?LZ怎么就确定是以4K为单位减少的。。。?
#2
UP
#3
memset(&mem_stat,0,sizeof(MEMORYSTATUS));
mem_stat.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&mem_stat);
CString s;
s.Format(L",%d", mem_stat.dwAvailPhys/1024);
这段代码不就是看内存的嘛,每次创建完线程,并且结束线程之后,我都查看了。当然不是每次都看,而是把每次的剩余内存写到字符串里面,循环100次之后看的。
#4
1. 你把代码精简下测测.
2. 使用release模式测试.
2. 使用release模式测试.
#5
这代码还如何精简,我都只保留了最少的。
#6
内存泄露都是由于应该释放的内存没有释放导致的,可以往这方面考虑考虑…
#7
仔细看下代码吧,这里有动态分配内存?
#8
你确定你的代码就这么一点点? 我觉得这段代码没有任何问题.
#9
我的代码有很多,肯定不可能说创建一个空线程,这没意义嘛。只是我为了定位问题,把代码都去掉了。这段代码我试了很多次,运行一次,内存就少一点,但是少一定数量之后就稳定了。大概100多K吧
#10
mark。。。这个是个问题。我倒是没检测我的内存使用。。。
不过没有像LZ那么多次100次。每次等5秒的定值。。。我都是等待有信号来了在做。每次做多10次就出来
关注一下。。。
不过没有像LZ那么多次100次。每次等5秒的定值。。。我都是等待有信号来了在做。每次做多10次就出来
关注一下。。。
#11
从代码本身看不到什么问题,建议lz
1.排查一下是不是其他系统中的程序影响了这个线程
2.测试1万次看一下结果是什么
1.排查一下是不是其他系统中的程序影响了这个线程
2.测试1万次看一下结果是什么
#12
CString 的 operator +=?
LZ 确定它不会增加 memroy 的使用??
Paul, Chao @ Techware
#13
把CString s;移到for循环外面再试试。
#14
它确实会增加内存,但是不会几次就增加4K,或者8K,确定不是因为它的原因。因为用固定的数组来存放每次的内存,还是可以看到减少的。用字符串是方便显示