我们在32位应用程序(基于C ++和WPF)中面临内存碎片问题。当我们运行它100小时。作为自动化测试的一部分。运行AST约14小时后应用程序崩溃。
我们使用CRT堆与Main()
中专门启用的LFH策略(低片段堆)。问题出现在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)
VM:max_free = 1734127616(1653.793 MB)
我们正在使用ADPlus和(Windows,Windbg和DebugDiag的调试工具)工具以3小时的间隔收集内存转储。
使用VS2010是否需要启用任何设置或标志或我需要执行的任何操作。
应用程序基于Windows 10 LTSB 64位(这是针对Windows 10的非常具体的企业操作系统版本,提供稳定性和安全性)