Случайные блокировки задач / повреждение памяти в приложении wpf на работающей виртуальной машине. net 4.8 - PullRequest
0 голосов
/ 06 января 2020

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

Приложение достигло точки в жизненном цикле разработки, когда пришло время начать более целенаправленное регрессионное тестирование. Это включало запуск приложения на виртуальных машинах, так как я хотел поддерживать приложение, работающее в виртуализированных средах.

Хорошо после тестирования в виртуализированных средах я случайно обнаружил очень странную проблему, когда любая команда, которую я связал, открывала дочернее окно, иногда не работает. Дочернее окно не будет отображаться, и кнопка будет недоступна из-за того, что команда может выполнить команду, выдавшую значение false, поскольку она считала, что команда все еще выполняется. Эта проблема не может быть воспроизведена на физическом компьютере и сильно постаралась.

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

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

1 Ответ

0 голосов
/ 06 января 2020

После удара головой я нашел эти статьи

https://www.gresearch.co.uk/2019/12/20/deep-dives-in-debugging-when-it-really-isnt-your-fault/

https://github.com/dotnet/coreclr/issues/26990

https://github.com/dotnet/coreclr/pull/10065

Короче говоря, это проблема с. net 4.8, и если я работаю на виртуальной машине под управлением 4.7.2, эти проблемы невозможно воспроизвести. Я собираюсь оставить это открытым, так как я обнаружил кое-что странное после обнаружения этой информации и дальнейшего тестирования.

Я обнаружил, что если я запускаю приложение на виртуальной машине с. net 4.7.2 с TWO или более vCPU, что эти случайные проблемы не воспроизводимы. Но если я работаю на виртуальной машине с. net 4.7.2 и ОДНЫМ vCPU, проблема все равно возникает. Кроме того, если я запускаю приложение на. net 4.8 с двумя или более виртуальными ЦП, возникает проблема. И наконец, если я продолжу работу. net 4.8 с ОДНЫМ vCPU, проблема не будет воспроизведена.

...