Я хочу проверить поведение некоторого кода, используя разные режимы сборщика мусора, в первую очередь сравнивая gcServer=true|false
.
Я вижу, как я обычно его устанавливаю: https://docs.microsoft.com/en-us/dotnet/core/run-time-config/garbage-collector https://dotnet.github.io/orleans/Documentation/clusters_and_clients/configuration_guide/configuring_.NET_garbage_collection.html
И как я могу это проверить: https://docs.microsoft.com/en-us/dotnet/api/system.runtime.gcsettings.isservergc?view=netframework-4.8
Но мой тест, похоже, игнорирует настройки.
Я попытался установить его, установив переменную своего пользовательского окружения COMPlus_gcServer = 1, а также запустив Visual Studio 2017 из cmd, где я установил ту же переменную окружения. Я также пытался установить тег <gcServer enabled="true"/>
в App.config для тестового проекта (хотя вряд ли это будет работать).
Мой тест по сути выглядит так:
[TestClass]
public class Foo
{
[DataTestMethod]
[DataRow("foo")]
public void Foo_Test(string fooString)
{
var msg = $"serverGC={System.Runtime.GCSettings.IsServerGC}";
Console.WriteLine(msg);
Debug.WriteLine(msg);
_workOnFoo(fooString);
}
И вывод всегда StandardOutput: serverGC=False
Как я могу изменить это значение на serverGC=true
и другие настройки (например, не одновременно с фоном)?
Редактировать: я нашел временный обходной путь и это устанавливается в файле testhost.exe.config. Мой находится по адресу "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ Extensions \ TestPlatform \ testhost.exe.config", где я добавил <gcServer enabled="true" />
под тегом runtime
.
Я также обнаружил связанную проблему, когда кто-то запрашивал возможность изменить это в наборе параметров vstest, но, похоже, он по-прежнему открыт: https://github.com/microsoft/vstest/issues/1967
Кстати, одна вещь, которая не работала , пыталась включить gcServer, запустив тест из командной строки с использованием vstest.console.exe
. Установка среды COMPlus_gcServer в этой командной строке не работала, а добавление тега <gcServer enabled="true" />
в vstest.console.exe.config
не изменило режим g c для теста. Я предполагаю, что gcServer был включен для процесса vstest, но он мне нужен для testhost, который я объяснил, как сделать выше.
В результате, этот вопрос все еще нуждается в хорошем решении.