我們有多線程應用程序。每個線程在初始化時都必須調用CoIntialize,因爲我們使用一些C++ COM對象來執行我們的數據庫操作。該應用程序在生產環境中的工作時間較長。但是突然間,線程初始化函數中的CoIntialize()API失敗,出現以下錯誤 ThreadInit; HRESULT:80070008:沒有足夠的存儲空間來處理此命令。 操作系統:帶有SP2的Windows Server 2003 R2。我在stackoverflow 中發現了一個工作,在Windows註冊表中將控制檯應用程序的堆積從512 KB增加到1MB。我可以做到這一點。但我想知道這可能首先發生的可能原因是什麼。 env最近沒有改變。在該機器上運行的其他幾個進程可以在沒有任何問題的情況下調用Coinitialize。它只有兩個過程失敗。在此先感謝CoInitialize失敗
1
A
回答
0
CoInitialize「初始化當前線程上的COM庫」,它具有內存要求。
我的猜測是,您的生產環境達到了應用程序的堆大小不足以在新線程上初始化COM的程度。也許你碰到了一個你分配了比以前更多的線程的場景,即使這個應用程序運行的時間不長。
提高堆大小可以解決這個問題,因爲它可以讓這些線程正確初始化。
1
某處泄漏了某處。首先假定它是你的程序。您可以通過Taskmgr.exe,進程選項卡,查看+選擇列以及勾選句柄,GDI對象和USER對象來觀察它的句柄用法。在您的應用運行時觀察這些數字。如果他們穩步爬升,那麼你的代碼泄露了句柄。一旦一列達到10,000,節目結束。
一個更晦澀的解釋是內核內存池中的空間不足。在「性能」選項卡的Taskmgr中也可見。
0
是否有機會從DLLMain調用CoInitialize,更重要的是,在DLL_THREAD_ATTACH上?這很可能會導致死鎖或導致泄漏。
我想多少個線程您使用的發生內存泄漏周圍的Thread Local Storage
相關問題
- 1. CoInitialize的EX是在JNI程序的WMI調用內部失敗存根
- 2. 當VC++ MFC項目中包含一個函數(來自lib)時,「CoInitialize失敗」
- 3. 調用CoInitialize/CoUnInitialize
- 4. Delphi(Indy + ADO)CoInitialize Slow
- 5. CoInitialize的()和靜態混亂
- 6. 我在哪裏放CoInitialize?
- 7. CoInitialize()/ CoUninitialize()調用配對
- 8. CoInitialize()未定義 - Python錯誤
- 9. TThread和COM - 「CoInitialize尚未被調用」,雖然CoInitialize在構造函數中調用
- 10. SSIS失敗包失敗
- 11. number_to_currency軌失敗,0失敗
- 12. 呼叫失敗()失敗
- 13. 警告:espcomm_sync失敗錯誤:espcomm_open失敗錯誤:espcomm_upload_mem失敗
- 14. 失敗
- 15. 失敗?
- 16. 失敗
- 17. 失敗
- 18. 調用CoInitialize()的語法;來自PHP?
- 19. win32com.client.Dispatch +的CherryPy = CoInitialize的沒有被調用
- 20. 在Delphi線程中使用CoInitialize
- 21. CoInitialize的(無)和的CoInitializeEx(0,COINIT_MULTITHREADED)差
- 22. CUBEFUNCTIONS - 一個失敗,然後都失敗?
- 23. 構建失敗,消息「processF0F1DebugResources失敗」
- 24. 執行javac失敗:編譯失敗
- 25. Struts2配置失敗 - 導入失敗
- 26. 編譯在require中失敗 - BEGIN失敗
- 27. 當gulp任務失敗時失敗msbuild
- 28. django登錄失敗頁面失敗
- 29. 編譯OpenCV for iOS失敗 - Cmake失敗
- 30. TLSv1連接失敗,握手失敗
指數地方? – RobS 2010-02-06 02:37:33
這是一個變量。它可能是7到64之間的任何值。發生問題時,我看不到超過10個線程正在運行。謝謝 – ipr 2010-02-08 16:50:49