Почему приложение .NET 4.0 WPF должно иметь намного лучшую производительность пользовательского интерфейса на гостевой VMware, чем на хосте?

#.net #wpf

#.net #wpf

Вопрос:

При тестировании нашего приложения C # / .NET4.0 / WPF на новой версии Win 7 Enterprise x64 в гостевой рабочей станции VMware 7.1.2, настроенной с 2 ГБ ОЗУ, время запуска и производительность пользовательского интерфейса были намного выше, чем при использовании того же приложения на хосте (без каких-либо виртуальных машин).

Хост имеет 8 ГБ оперативной памяти, но достаточно загружен. Тест на хосте также выполнялся на гостевой машине с большей нагрузкой на хост плюс накладные расходы виртуальной машины, все еще с аналогичными результатами, гость быстрее и имеет более плавный пользовательский интерфейс (я знаю, субъективная мера).

Вот несколько возможных причин:

  • Рендеринг WPF в системе отображения VMware превосходит (возможно) глючный драйвер AMD на физической. Обратите внимание, что гость настроен с включенным параметром «Ускорение 3D-графики». Графическая карта — это ATI / AMD Firepro, и мне пришлось выполнить откат от последней версии драйвера, поскольку это в значительной степени снизило производительность WPF, как в нашем приложении, так и в VS2010.

  • Реестр и другие проблемы, оказывающие особенно большое влияние на производительность WPF / .NET по сравнению с чистой виртуальной машиной.

Может ли кто-нибудь дать мне какие-либо другие идеи о том, почему это так, поскольку просить клиентов использовать продукт в гостевой системе VMware с использованием чистой установки ОС было бы странно.

Спасибо

Комментарии:

1. Вместо того, чтобы просить их сделать это, зачем беспокоиться? Если оно соответствует требованиям заказчика и работает «достаточно быстро», то почему имеет значение, может ли оно работать быстрее? Это особенно верно, если заказчик является корпоративным клиентом или внутренней командой, и вам не нужно удивлять их настолько, чтобы получить прямые продажи…

2. Извините, Мерлин, последняя часть была несколько шутливой. У нас есть клиенты, жалующиеся на проблемы с производительностью, и странно то, что этот сценарий, возможно, самый быстрый из всех, которые я видел, — даже быстрее, чем на физических машинах с более экзотическим оборудованием. Предыдущая версия была C , поэтому планка производительности была высокой для начала.

3. Мерлин, ты меня неправильно понял, я имел в виду, что я был легкомысленным в своем последнем предложении исходного вопроса, а не ты. Я приношу извинения за любое непреднамеренное нарушение. Я должен держать свои вопросы более краткими!

4. @ari… У меня точно такая же проблема. Оборудование с максимальной загрузкой, но дрянная производительность по сравнению с виртуальной машиной. НО .. у меня тоже ATI / AMD, и я всегда ненавидел их драйверы, поэтому ваши комментарии для меня еще более интересны.

Ответ №1:

У вас могут быть некоторые странные настройки реестра, которые препятствуют производительности WPF. WPF использует 3 «уровня» рендеринга (ссылка: http://msdn.microsoft.com/en-us/library/ms742196.aspx ) и в зависимости от конкретных настроек вы можете получать различную производительность в зависимости от того, где была настроена исходная виртуальная машина. Когда вы клонируете виртуальную машину, вы берете с собой все настройки реестра. Вот те, которые нужно проверить

Комментарии:

1. Вы можете уменьшить эти настройки, чтобы сбалансировать визуальные эффекты с оборудованием. Я предполагаю, что чистая ОС использует наилучшую оптимизацию для доступного оборудования.

2. Спасибо Nate — все по умолчанию. Регистрация в приложении сообщает о возможностях уровня 2 и аппаратном рендеринге, действующих как на гостевом, так и на хосте. Я хорошо знаком с этими настройками. Также обратите внимание, что виртуальная машина является чистой установкой, а не преобразованием с хоста VMware. Я принудительно выполнял программный рендеринг в приложении при запуске на виртуальной машине, и это немного снизило производительность, но все же не до уровня физического хоста, использующего аппаратный рендеринг на приличной видеокарте.

3. Настроены ли они для работы с несколькими мониторами? «Превышение доступного объема текстурной памяти обычно приводит к тому, что логика рендеринга WPF возвращается к программному обеспечению, а несколько дисплеев (несколько мониторов) оказывают мультипликативное влияние на объем видеопамяти, необходимый для приложения» Источник msdn.microsoft.com/en-us/library/aa969767.aspx Вы также можете заглянуть в dxdiag, если вы еще этого не сделали.

4. У меня есть несколько мониторов, и на физическом блоке они обычно имеют разрешение 1920×1200. Виртуальная машина, безусловно, видит только 1. Я изучу этот маршрут. Еще раз спасибо.

5. Есть какие-нибудь успехи в этом? Мне интересно посмотреть, что произошло.