Измените настройки сборщика мусора для процесса c# unit test testhost.exe - PullRequest
0 голосов
/ 28 февраля 2020

Я хочу проверить поведение некоторого кода, используя разные режимы сборщика мусора, в первую очередь сравнивая 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, который я объяснил, как сделать выше.

В результате, этот вопрос все еще нуждается в хорошем решении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...