CreateProcess 記憶體怎麼用掉越來越多利用 CreateProcess 來執行另外一個程式, 呼叫方式如下: STARTUPINFO siStartInfo; PROCESS_INFORMATION pi; // Set up members of the PROCESS_INFORMATION structure. ZeroMemory( &pi, sizeof(PROCESS_INFORMATION) ); // Set up members of the STARTUPINFO structure. ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) ); siStartInfo.cb = sizeof(STARTUPINFO); siStartInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; siStartInfo.hStdOutput = m_hChildStdoutWr; siStartInfo.hStdInput = m_hChildStdinRd; siStartInfo.hStdError = NULL; // Use this if you want to show the child. siStartInfo.wShowWindow = SW_HIDE; // Create the child process. BOOL bRet = CreateProcess(NULL, (char *)szCmdLine, // command line NULL, // process security attributes NULL, // primary thread security attributes TRUE, // handles are inherited 0, // creation flags NULL, // use parent's environment NULL, // use parent's current directory &siStartInfo, // STARTUPINFO pointer &pi); // receives PROCESS_INFORMATION 問題是執行幾次以後, 記憶體卻變得越來越少, 用工作管理員一看, 控制碼(其實是 Handle, 翻地有夠爛)用的越來越多, 不得了了, 連跑幾天下來不就把記憶體吃光光?(跑了30分鐘, 記憶體使用量倍增)(結束子行程, 資源仍然未釋放, 要關掉主程式, 才會完全釋出)找了好久, 終於發現建立行程的 Process Handle 與 Thread Handle 即使程式執行完了都還會佔用記憶體. 因此加入底下兩行, 把 handle關掉. 這樣記憶體和Handle 用量程式執行完後就會恢復原來的值. CloseHandle(pi.hProcess); CloseHandle(pi.hThread);看懂的人, 至少現賺幾千塊的學費..
- Jan 01 Sun 2012 06:59
-
CreateProcess 記憶體怎麼用掉越來越多
請先 登入 以發表留言。