Я не хочу вдаваться в подробности о функциональности, но размеры окна нашего приложения изменяются, когда к нему добавляется или удаляется дочерний элемент управления. Во время стресс-тестов, проведенных недавно, мы заметили высокий пиковый рабочий набор приложения в диспетчере задач Windows. Дочерний элемент управления добавлялся и удалялся каждые 200 мс, поэтому окно каждый раз становилось больше или меньше. Мы проводили эти тесты на виртуальных машинах VMware Workstation Pro (Windows Server 2012, Windows 10).
Максимум через пару часов приложение всегда сообщало об исключениях из памяти, и указанное окно зависало или исчезало. Мы заметили, что рабочий набор был нормальным после сбоя (менее 100 МБ), но пиковый рабочий набор всегда превышал 1 ГБ (от ~ 1,1 до ~ 1,6 ГБ) в этот момент.
Чтобы выяснить, была ли проблема вызвана ошибкой в нашем приложении или нет, мы решили создать однооконное WPF-приложение только с таймером, который изменяет высоту главного окна каждые 200 мс. Оказалось, что это приложение имело ту же проблему.
Дело в том, что мне не удалось найти информацию по подобным вопросам, поэтому я решил задать вопрос здесь. Как бы вы объяснили такое поведение?
Позвольте мне также отметить, что:
- Когда окно было свернуто, проблема никогда не возникала.
- Трудно было воспроизвести проблему на хосте (не на ВМ), но нам довелось наблюдать ее и там (на Windows 8).
Мы также проводили тесты на виртуальной машине (WMware ESX 5.5). Авария произошла бы намного быстрее, если бы никто не смотрел :-). Я имею в виду, что мы подключились к виртуальной машине из vSphere Client и открыли консоль, чтобы запустить наше тестовое приложение в ОС. Затем мы переключились на другую вкладку vSphere Client, чтобы скрыть консоль. Когда мы вернулись к нему позже (скажем, через полчаса), мы могли наблюдать историю использования памяти нашего тестового приложения с медленно нарастающим наклоном, который моментально падал в момент отображения консоли.
Буду признателен за любую информацию, которая поможет мне понять причину этой проблемы. Спасибо.
-- РЕДАКТИРОВАТЬ --
Я запустил тестовое приложение в двух экземплярах на виртуальной машине (Windows Server 2012) — оба скомпилированы для любого ЦП, но в одном из них в Visual Studio не установлен флажок Предпочитать 32-разрядную версию. Итак, один запустился в 32-битном режиме, а другой в 64-битном. 32-разрядная версия вышла из строя примерно через час, а пиковая рабочая нагрузка составила менее 150 МБ. 64-битная версия продолжала работать. Мне интересно, может ли это быть выходом...
Ниже приведена сигнатура проблемы 32-битной версии приложения:
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: ResizeStressTest 32.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 5762641e
Problem Signature 04: PresentationCore
Problem Signature 05: 4.0.30319.34209
Problem Signature 06: 5348b56b
Problem Signature 07: 283
Problem Signature 08: 13
Problem Signature 09: System.OutOfMemoryException
OS Version: 6.2.9200.2.0.0.272.7
Locale ID: 1031
Additional Information 1: 5861
Additional Information 2: 5861822e1919d7c014bbb064c64908b2
Additional Information 3: 5c1f
Additional Information 4: 5c1f554df00553b422a8baa03b19335a
Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=190175
If the online privacy statement is not available, please read our privacy statement offline:
C:\Windows\system32\en-US\erofflps.txt