Выигрыш из приложения замедляется - PullRequest
0 голосов
/ 11 ноября 2011

Я создал приложение с использованием Visual Studio .NET, и оно работает нормально.После того, как приложение используется более 2-3 часов, оно начинает работать медленно, и я не знаю почему.Я использовал GC.Collect();, чтобы получить проблемы с утечкой памяти, но теперь у меня есть новый.Кто-нибудь знает решение?

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

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

Если вы не очистите свои объекты должным образом, сборщик мусора не будет ничего собирать.

При обработке с использованием памяти,Вы должны строго рассмотреть следующие шаблоны:

  1. Слабые события ( Документация MSDN здесь ) Если вы не отмените подписку на события , объекты подпискиникогда не будет выпущен в сборщик мусора.GC.Collect() будет НЕ удалять эти объекты, и они будут загромождать вашу память.

  2. Реализовать интерфейс IDisposable ( Документация MSDN здесь )(Я настоятельно рекомендую прочитать эту дукументацию, поскольку я видел много неправильных реализаций.) Вы должны всегда освобождать ресурсы, которые вы использовали.Вызовите Dispose() на каждый объект, который предлагает это!

  3. То же самое относится к потокам.Всегда вызывайте Close() для каждого объекта , который предлагает это.

  4. Чтобы упростить пункты 2. и 3. Вы можете использовать блоки using.( документация MSDN здесь ) Как только эти блоки кода выходят из области видимости, они автоматически вызывают соответствующие методы Dispose() или Close() для данного объекта.Это то же самое, но более удобно при использовании комбинации try... finally.

0 голосов
/ 11 ноября 2011

Попробуйте профилировщик памяти, такой как ANTS Memory Profiler. Сначала вам нужно понять, что происходит, затем вы можете подумать, как это исправить.

http://www.red -gate.com / продукция / DotNet-разработка / Муравьи-памяти профайлер /

...