Как я могу понять, почему мой сервис .net перегружает память? - PullRequest
0 голосов
/ 27 июня 2011

У нас есть сервис .net c #, который при включении тратит все больше и больше памяти. Он имеет один производный класс «Service», который в основном создает другие объекты, которые инкапсулируют отдельные функции, которые служба должна поддерживать. Я думаю, что, возможно, я создаю объект, и он не получает мусор из-за ошибки программирования.

Кто-нибудь знает лучший способ узнать, что происходит без установки точек останова?

Ответы [ 7 ]

1 голос
/ 27 июня 2011

Вы можете использовать профилировщики памяти, такие как memprofiler , ants profiler , и этот вопрос также может помочь Что такое хорошие профилировщики .NET?

Они дают вам хороший обзор создаваемых объектов, поколения, в котором они находятся, памяти, которую они используют и т. Д. В большинстве случаев вы можете сузить проблему с помощью профилировщиков.

0 голосов
/ 27 июня 2011

Открыть диспетчер задач и посмотреть память

Обернуть каждый основной элемент выполнения в классе (здесь я использовал BLL)

затем звоните из BLL

Тогда попробуйте обернуть каждую часть верхнего уровня в оператор использования по одному

using ( TheBll bll = new TheBll)
            {
                bll.ProcessStuff();
            }

Это освобождает большинство объектов после выполнения кода и упрощает очистку памяти.

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

Если вы довольны результатами после того, как завершили все свои звонки на высшем уровне с помощью операторов, возможно, вам нужно будет закончить, прежде чем копать глубже. (Хотя вы должны копать, просто чтобы узнать, что на самом деле не так, когда вы не спешите)

0 голосов
/ 27 июня 2011

Вам необходимо использовать профилировщик памяти, чтобы увидеть, какие объекты вызывают утечки памяти.Я использую этот для таких случаев: http://www.jetbrains.com/profiler/

0 голосов
/ 27 июня 2011

Используйте CLR Profiler.Это профилировщик специально для изучения использования памяти.

1.1 Профилировщик

2.0 Профилировщик

4.0 Профилировщик

0 голосов
/ 27 июня 2011

Создать текстовый журнал и записывать все, что происходит, и работать оттуда.Особенно с услугой, это самый простой способ выяснить, что может пойти не так.Просто распечатайте события, состояния объектов и их свойства.

Может быть, вы найдете что-нибудь таким образом.

Удачи вам

0 голосов
/ 27 июня 2011

Вы должны использовать объекты, которые должны быть утилизированы.
Некоторые хорошие примеры - это потоки и веб-клиенты.

0 голосов
/ 27 июня 2011

лучший способ - запустить Performance Profiler, который поставляется в Visual Studio.Позволяет увидеть время жизни вашего объекта.

Эта ссылка может быть полезной

...