我们有多线程应用程序。每个线程在初始化时都必须调用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. Delphi(Indy + ADO)CoInitialize Slow
- 4. CoInitialize()/ CoUninitialize()调用配对
- 5. CoInitialize的()和静态混乱
- 6. 呼叫失败()失败
- 7. SSIS失败包失败
- 8. TThread和COM - “CoInitialize尚未被调用”,虽然CoInitialize在构造函数中调用
- 9. 警告:espcomm_sync失败错误:espcomm_open失败错误:espcomm_upload_mem失败
- 10. 失败?
- 11. 失败
- 12. 失败
- 13. 失败
- 14. 快速失败或失败安全?
- 15. AfterTargets失败不会失败msbuild运行
- 16. OpenCV:Traincascade失败“断言失败_img.cols == winSize.width”
- 17. sqlite3_step失败:NOT NULL约束失败
- 18. 登录失败并重定向失败
- 19. 编译在require中失败 - BEGIN失败
- 20. WSO2 CEP通过SOAP失败BPS失败
- 21. 提交存储失败,“验证失败”
- 22. 构建失败,消息“processF0F1DebugResources失败”
- 23. TLSv1连接失败,握手失败
- 24. ExporttoPDF()失败,数据库登录失败
- 25. 推送失败:失败,错误:
- 26. 选择非失败列失败
- 27. 快速JSON失败,断言`IsObject()'失败
- 28. 发送消息失败失败android
- 29. 量角器失败后失败?
- 30. win32com.client.Dispatch +的CherryPy = CoInitialize的没有被调用
指数地方? – RobS 2010-02-06 02:37:33
这是一个变量。它可能是7到64之间的任何值。发生问题时,我看不到超过10个线程正在运行。谢谢 – ipr 2010-02-08 16:50:49