Почему мое приложение со временем становится менее отзывчивым? - PullRequest
0 голосов
/ 16 декабря 2018

Я отлаживаю приложение C #, которое через несколько дней перестает отвечать на запросы.Приложение вычисляет использование памяти / ЦП каждую секунду и отображает его в нижнем колонтитуле основного пользовательского интерфейса.

Причина отсутствия ответа - время, необходимое для извлечения RawValue из PerformanceCounter («Рабочий набор - частный»).Через пару дней для получения RawValue требуется почти секунда, замораживая основной поток пользовательского интерфейса.Если я перезагружаю свой компьютер, все происходит снова в течение нескольких дней, пока он постепенно не становится менее отзывчивым.Если я перекомпилирую это приложение без кода PerformanceCounter (с открытым исходным кодом), оно сразу же начнет работать нормально.

Чтобы исключить, что это приложение, вот некоторый пример кода, который делает то же самое:

static void Main(string[] args)
{
    using (var memoryWorkingSetCounter = new PerformanceCounter("Process", "Working Set - Private", Process.GetCurrentProcess().ProcessName, true))
    {
        while (!Console.KeyAvailable)
        {
            var memoryWorkingSetSw = new Stopwatch();
            memoryWorkingSetSw.Start();
            var memoryWorkingSetValue = memoryWorkingSetCounter.RawValue;
            memoryWorkingSetSw.Stop();
            Console.WriteLine(memoryWorkingSetValue.ToString());
            Console.WriteLine(memoryWorkingSetSw.Elapsed.ToString());
            Thread.Sleep(TimeSpan.FromSeconds(1));
        }
    }
    Console.Read();
}

Я оставил это запущенным в течение ~ 2,5 дней и изобразил время Elapsed вмиллисекунды:

graph

Что может привести к замедлению работы счетчика производительности в Windows?Может ли другое приложение не убирать его?Есть ли способ отладки, какие приложения также смотрят на этот счетчик производительности?Я на Windows 10.

1 Ответ

0 голосов
/ 29 апреля 2019

почему вы объявляете секундомер внутри цикла?удалите все новые объявления, возможные внутри циклов.

, когда вы делаете это, память увеличивается со временем, и вы рассчитываете на сборщик мусора, чтобы сделать работу

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