Хобрук: Ваш путь к мастерству в программировании

Высокое использование памяти приложением WPF на рабочей станции VMWare

Я не хочу вдаваться в подробности о функциональности, но размеры окна нашего приложения изменяются, когда к нему добавляется или удаляется дочерний элемент управления. Во время стресс-тестов, проведенных недавно, мы заметили высокий пиковый рабочий набор приложения в диспетчере задач Windows. Дочерний элемент управления добавлялся и удалялся каждые 200 мс, поэтому окно каждый раз становилось больше или меньше. Мы проводили эти тесты на виртуальных машинах VMware Workstation Pro (Windows Server 2012, Windows 10).

Максимум через пару часов приложение всегда сообщало об исключениях из памяти, и указанное окно зависало или исчезало. Мы заметили, что рабочий набор был нормальным после сбоя (менее 100 МБ), но пиковый рабочий набор всегда превышал 1 ГБ (от ~ 1,1 до ~ 1,6 ГБ) в этот момент.

Чтобы выяснить, была ли проблема вызвана ошибкой в ​​нашем приложении или нет, мы решили создать однооконное WPF-приложение только с таймером, который изменяет высоту главного окна каждые 200 мс. Оказалось, что это приложение имело ту же проблему.

Дело в том, что мне не удалось найти информацию по подобным вопросам, поэтому я решил задать вопрос здесь. Как бы вы объяснили такое поведение?

Позвольте мне также отметить, что:

  1. Когда окно было свернуто, проблема никогда не возникала.
  2. Трудно было воспроизвести проблему на хосте (не на ВМ), но нам довелось наблюдать ее и там (на 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

  • как воспроизвести на хосте, я пробовал это private void dispatcherTimer_Tick (отправитель объекта, EventArgs e) { var random = new Random(); var height = random.Next(1080); this.Height = высота; } private void Window_Loaded (отправитель объекта, RoutedEventArgs e) { var dispatcherTimer = new DispatcherTimer { Interval = new TimeSpan (0, 0, 0, 0, 200) }; dispatcherTimer.Tick += новый обработчик событий (dispatcherTimer_Tick); диспетчерТаймер.Старт(); } 20.06.2016
  • Когда окно свернуто, обновления графического интерфейса не происходят, и код выполняется довольно быстро, когда окно снова активируется, происходят обновления графического интерфейса, я наблюдал это, когда писал много текста в элемент управления TextBox с использованием TPL, вы используете задачи у вас есть Visual Studio на виртуальной машине для профилирования? 20.06.2016
  • Пример с таймером в порядке. Вот как мы это тестировали (на самом деле я не использовал случайную высоту, а просто использовал два взаимозаменяемых значения, но это не имеет значения). Я не уверен, что вы воспроизведете это на хосте - у меня не получилось, хотя мой коллега как-то смог. И чтобы ответить на другие вопросы, я не использую Tasks и не устанавливаю VS на ВМ, но на этой неделе я попытаюсь выполнить профилирование. Спасибо за ваше участие! 21.06.2016
  • Кстати, приложение написано на VB.NET, .NET Framework 4.5, VS 2012. Протестировано на VMWare Workstation 12 Pro. 21.06.2016
  • Является ли эта версия VMWare WorkStation 12 Pro бесплатной?, как распределяются ресурсы на вашей виртуальной машине, если бы вы могли предоставить полезные ссылки для настройки виртуальной машины с использованием Hyper-V или VMWare (кажется, что VMWare лучше, чем Hyper-V) и ваша виртуальная машина конфигурация, я бы установил ОС Windows Server 2012 с помощью образа iso, также, пожалуйста, предоставьте ссылки о том, как удалить эту виртуальную машину и освободить ресурсы, когда я захочу ее удалить, с этим я мог бы попытаться воспроизвести проблему на выходных 21.06.2016
  • @abdulmateenmohammed VMWare Workstation, к сожалению, платная, но пробную версию можно скачать отсюда (vmware .com/products/workstation/workstation-evaluation). Что касается настроек, я бы остался с настройками по умолчанию, предложенными при создании новой виртуальной машины для ОС. Абдул, я не хочу тебя так сильно беспокоить. Я просто хотел узнать, были ли у кого-нибудь еще такие же проблемы с виртуальными машинами, и как их объяснить. Пока ни один из наших клиентов не сообщал о таких проблемах, но мы просто хотим перестраховаться, и поэтому я разместил этот вопрос. Большое спасибо! 21.06.2016
  • Удачи! @Мариуш-Шимке 22.06.2016

Ответы:


Новые материалы

HMTL - Многозадачное обучение для решения задач НЛП
Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..