Jos*_*ley 5 debugging memory-management out-of-memory
我们的应用程序在一个特定用户的计算机上失败ERROR_NOT_ENOUGH_MEMORY("没有足够的存储空间来处理此命令").
这个错误显然是在我们正在使用的Delphi VCL框架内的某个地方引发的,所以我不确定哪个Windows API函数负责.
记忆是个问题吗? 致电GlobalMemoryStatus提供以下信息:
我觉得奇怪的是,当页面文件中有足够的空间可用时,Windows会让可用的物理内存变得如此之低,但我对Windows的虚拟内存管理知之甚少,以了解这是否正常.是吗?
如果不是内存,那么哪个资源限制被命中?从我在网上看到的,ERROR_NOT_ENOUGH_MEMORY可能是应用程序遇到几个限制(GDI对象,USER对象,句柄等)的结果,而不一定是内存.是否有一个全面的列表,列出了Windows强制执行的限制?有没有办法找出受到限制的限制?我试过谷歌,但我找不到任何系统的概述.
本例中的罪魁祸首是CreateCompatibleBitmap。显然,Windows 可能会对设备相关位图的可用内存执行相当严格的系统范围限制(例如,请参阅此邮件列表讨论),即使您的系统有足够的内存和大量的 GDI 资源。(这些系统范围的限制显然是因为 Windows 可能会在显卡内存中分配与设备相关的位图。)
解决方案只是使用与设备无关的位图 (DIB)(尽管这些可能无法提供那么好的性能)。 此知识库文章介绍了如何为设备选择最佳 DIB 格式。
资源限制的其他候选者(来自其他人的答案和我自己的研究):
| 归档时间: |
|
| 查看次数: |
7768 次 |
| 最近记录: |