0

我们在 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 企业操作系统版本,提供稳定性和安全性)

4

0 回答 0