我们在 32 位应用程序(基于 C++ 和 WPF)中面临内存碎片问题。当我们运行它 100 小时。作为自动化测试的一部分。运行 AST 约 14 小时后应用程序崩溃。
我们使用 CRT 堆和 LFH 策略(低片段堆)在Main()
. 问题出现在 Windows 10 平台上。在 Windows 8 平台上使用相同的应用程序二进制文件集没有问题。我们完成了 100 小时。在 windows 8 平台上运行测试。
我们在方法中创建了一个大块堆,Main()
当我们需要大量内存并且我们在代码中管理它时,我们将这个堆用于特定目的。从虚拟内存统计日志中,我们可以看到初始虚拟内存分配为 1.79 GB。
14 小时后。自动化测试运行:在 Windows 10 上
Combined Available = 1590176752( 1516.511 MB)
Combined Max Available = 3989504( 3.805 MB)
Combined Frag Percent = 99.75%
CRT:sum_alloc = 2737569144(98.50%, 2610.749 MB)
CRT:max_alloc = 4458496( 4.252 MB)
CRT:allocAverageSize = 9043
CRT:num_free_blocks = 37813
CRT:sum_free = 22620888( 0.81%, 21.573 MB)
CRT:max_free = 514104( 0.490 MB)
VM:sum_free = 1581957120(36.83%,1508.672 MB)
VM:max_free = 10321920( 9.844 MB)
在 Windows 8 上运行 100 小时。
组合可用 = 1881204960(1794.057 MB)
组合最大可用 = 1734127616(1653.793 MB)
综合碎片百分比 = 7.82%
VM:sum_free = 1845817344(42.98%,1760.309 MB)
虚拟机:max_free = 1734127616(1653.793 MB)
我们正在使用 ADPlus 和(Windows、Windbg 和 DebugDiag 的调试工具)工具以 3 小时的间隔收集内存转储。
是否有任何我需要启用的设置或标志,或者我必须使用 VS2010 对代码做的任何事情。
应用程序基于 Windows 10 LTSB 64 位(这是非常具体的 Windows 10 企业操作系统版本,提供稳定性和安全性)