Мы сталкиваемся с проблемой фрагментации памяти в нашем 32-битном приложении (на C ++ и WPF). когда мы запускаем его в течение 100 часов. как часть автоматизированного теста. Приложение падает после запуска AST в течение ~ 14 часов.
Мы используем CRT-кучу с политикой LFH (Низкая фрагментная куча), включенной исключительно в Main()
, Проблема идет на платформе Windows 10. Нет проблем на платформе Windows 8 с тем же набором наших двоичных файлов приложения. Мы завершили 100 часов. запустить для тестирования на платформе Windows 8.
Мы создаем большую кучу блоков в Main()
Метод и эту кучу мы используем для конкретной цели, когда нам требуется большой объем памяти, и мы управляем этим в нашем коде. Из журналов статистики виртуальной памяти видно, что начальное распределение виртуальной памяти составляет 1,79 ГБ.
После 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 МБ)
Максимальный комбинированный доступ = 1734127616 (1653,793 МБ)
Комбинированный процент осколков = 7,82%
VM: sum_free = 1845817344 (42,98%, 1760,309 МБ)
VM: max_free = 1734127616 (1653,793 МБ)
Мы используем ADPlus и (средства отладки для Windows, Windbg и DebugDiag) для сбора дампов памяти с интервалом в 3 часа.
Есть ли какие-либо настройки или флажки, которые мне нужно включить, или все, что мне нужно сделать с помощью кода, используя VS2010.
Приложение основано на 64-битной Windows 10 LTSB (которая является очень специфической версией Enterprise OS для Windows 10, обеспечивает стабильность и безопасность)
Задача ещё не решена.
Других решений пока нет …