Я забочусь о рабочем приложении WPF, которое многие пользователи запускают на разных аппаратных средствах. Множество потоков постоянно перекачивают большой объем данных.Как пользователи могут использовать фоновый сервер GC в настольном приложении без изменения app.config?
Включение .NET Framework 4.5 Background server garbage collection продемонстрировало значительные улучшения в производительности, однако это связано с тем, что используется больше памяти и различные модели использования ЦП. Это потенциальная проблема для пользователей с менее мощными машинами, поэтому я хочу предоставить пользователям, которые бы выиграли от отказа от включения GC сервера, вместо того, чтобы заставлять его на всех.
Единственный способ я нашел до сих пор, чтобы включить это в App.Config:
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
Однако, большинство пользователей не имеют права редактировать это как приложение находится в Program Files, а они нет местных администраторов. Мой идеальный сценарий - это дружественный вариант, который может перезапустить приложение с включенным сервером GC и запомнить их выбор.
Так что мой вопрос: кто-нибудь знает о другом способе применения этой настройки?
Я знаю, что это, вероятно, принятие желаемого за действительное, но в идеале это что-то динамическое во время выполнения, или, возможно, аргумент командной строки или переменная среды, которая может быть установлена в контексте процесса. Есть намеки на это в CoreCLR с complus_gcServer env variable.
Я читал о глобальных системных настройках, которые могут включить это на машине, но я не хочу рисковать воздействовать на другие приложения и вызывать другие неблагоприятные последствия, но я хочу, чтобы это применимо к моему приложению.
В качестве последнего средства я мог бы развернуть две копии EXE с различными конфигурационными файлами и пусковой установкой, чтобы выбрать правильную версию для запуска, однако это кажется экстремальным.
Спасибо за чтение, любые идеи приветствуются!
Я видел п интересного заявления в этом блоге. «Вам не нужно ничего менять, чтобы использовать сервер GC с базовым сервером. Как и большинство функций GC, он автоматически включается для всех приложений». ...... Но пока читать полностью. https://blogs.msdn.microsoft.com/dotnet/2012/07/20/the-net-framework-4-5-includes-new-garbage-collector-enhancements-for-client-and-server-apps/ – Naidu
Спасибо за ссылку, но сообщение в блоге кажется неправильным. GCSettings.IsServerGC возвращает false, если он не указан в app.config – embee