代码改变世界

除了memory leak和handle leak外的其它资源泄露

  lixiong  阅读(3056)  评论(0编辑  收藏  举报

 

除了memory leakhandle外,其它类型的资源泄露还有GDI Leakdesktop heap high usage

 

关于GDI Leak,可以参考:

 

Detect and Plug GDI Leaks in Your Code with Two Powerful Tools for Windows XP

http://msdn.microsoft.com/msdnmag/issues/03/01/GDILeaks/default.aspx

 

Resource Leaks: Detecting, Locating, and Repairing Your Leaky GDI Code

http://msdn.microsoft.com/msdnmag/issues/01/03/leaks/default.aspx

 

Desktop heap是一类特殊的内存。下面这些kb对此有一些描述:

 

PRB: User32.dll or Kernel32.dll fails to initialize

http://support.microsoft.com/kb/184802/en-us

 

"Out of Memory" error message appears when you have a large number of programs running

http://support.microsoft.com/kb/126962/en-us

support.microsoft.com 上搜索desktop heap,可以找到更多的信息。Windows除了使用进程来管理资源外,还是用Sessiondesktop来管理资源。比如只有在同一个Session里面的进程才可以共享剪贴板数据,Windows Message只能在属于同一个desktop的进程之间传递。而desktop heap,是操作系统管理的,为不同session创建的,由同一session内所有desktop共享的内存。当创建进程,创建GUI的时候,都会消耗desktop heap。当Desktop Heap用光后,系统中各种莫名其妙的问题就会发生。比如无法创建新进程,无法弹出菜单,API调用会莫名其妙地出错。

 

Desktop heap用光的原因往往是太多进程同时运行,或者创建了太多GUI object。怀疑是Desktop heap相关问题的时候,首先可以用下面这篇文章的方法来检查是否Desktop heap用光:

 

A new System log entry is not generated if the desktop heap is exhausted in Microsoft Windows 2000

http://support.microsoft.com/kb/810807/en-us

 

如果确认是desktop heap问题后,检察系统是否有太多进程在同时运行,(我曾经见过一百多个dllhost进程同时运行的情况),或者某一程序有特殊的GUI操作。在优化系统,优化代码后,如果的确需要使用很多desktop heap,可以参考前面的kb改变注册表来做调整。

 

除了上面这些系统资源外,还有其它很多资源都可能出现问题,比如TCP Port用光。

 

When you try to connect from TCP ports greater than 5000 you receive the error 'WSAENOBUFS (10055)'

http://support.microsoft.com/kb/196271/en-us

 

如果排错只是按部就班的操作,排错就不是一项有趣的工作了。

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示