Утечки памяти в C#
От: Sheveron Россия http://localhost/
Дата: 07.12.07 07:24
Оценка:
Здравствуйте.

Подходит к концу написание первого проекта на C#.
Хотелось бы получить рекомендации экспертов дотнэта как избежать утечек памяти в managed коде (только не надо говорить что гц все сам соберет. Даже он не всемогуший).

На данный момент с помощью мемори профайлера была выявлена только одна утечка:
очень-очень медленно растет количество System.String в программе.
Хотя абсолютно все потоки находятся в режиме ожидания эвентов, и только через некоторое время вызывается статический метод в котором выводится наружу сообщение об отсутствии данных.

Очень хочется увидеть распространенные ошибки приводящие к утечке памяти (невозможности гц счистить мусор).
Или ссылки на доку где описывается как избегать утечек при работе со своими объектами и объектами из System и просто типами.

P.S. сильно не пинайте, хочется ведь по-человечески программу написать, а т.к. это самый первый проект на шарпе, то хотелось бы изучить и закрепить как надо правильно писать
P.P.S. естественно гуглил, но единственное что нашел, это Dispose. Хочется посмотреть примеры плохого кода.

Заранее благодарен.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re: Утечки памяти в C#
От: hugo Австрия  
Дата: 07.12.07 07:48
Оценка:
Здравствуйте, Sheveron, Вы писали:

S>Хотелось бы получить рекомендации экспертов дотнэта как избежать утечек памяти в managed коде (только не надо говорить что гц все сам соберет. Даже он не всемогуший).

ГЦ соберет все, на что нет ссылок.

S>Очень хочется увидеть распространенные ошибки приводящие к утечке памяти (невозможности гц счистить мусор).

Распространенные ошибки ИМХО нерадивое отношение к объектам, реализующим IDisposable (они ведь его не зря реализуют ), забытые объекты, на которые есть ссылки (про делегаты не забываем также)

S>Или ссылки на доку где описывается как избегать утечек при работе со своими объектами и объектами из System и просто типами.

А в чем по-вашему кардинальное отличие при работе со своими объектаи и объектами из System? Есть value-type и reference-type, а кем там эти типы данных сконструированы для управления памятью не имеет никакого значения.


S>P.P.S. естественно гуглил, но единственное что нашел, это Dispose. Хочется посмотреть примеры плохого кода.

Лучше погуглить и посмотреть пример хорошей реализации патерна детерминированного освобождения ресурсов.
Re: Утечки памяти в C#
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 07.12.07 08:10
Оценка:
Здравствуйте, Sheveron, Вы писали:

+ к выше сказанному, возможно, стоит посмотреть, что такое слабые ссылки.
Re: Утечки памяти в C#
От: Warr  
Дата: 07.12.07 08:11
Оценка:
Здравствуйте, Sheveron, Вы писали:

S>Здравствуйте.


S>Подходит к концу написание первого проекта на C#.

S>Хотелось бы получить рекомендации экспертов дотнэта как избежать утечек памяти в managed коде (только не надо говорить что гц все сам соберет. Даже он не всемогуший).

гц собирает все только когда заканчивается память, так что все объекты будут висеть неограниченное количество времени даже если ссылок на них нет.
а чтобы лучше понять это нужно почитать о принципах работы гц, тока не везде правильно пишут о нем. Вроде бы у Рихтера неплохо написано: а именно когда, ка и почему работает гц.

Удачи в начинаниях
Re: Утечки памяти в C#
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.12.07 07:01
Оценка: +1
Здравствуйте, Sheveron, Вы писали:
S>На данный момент с помощью мемори профайлера была выявлена только одна утечка:
S>очень-очень медленно растет количество System.String в программе.
S>Хотя абсолютно все потоки находятся в режиме ожидания эвентов, и только через некоторое время вызывается статический метод в котором выводится наружу сообщение об отсутствии данных.
Пока что вы никакой утечки не выявили. Выявили только симптомы утечки.
Разберитесь, кто создает эти строки. Разберитесь, где накапливаются ссылки на них. Пока что вы только-только начали копать.

S>Очень хочется увидеть распространенные ошибки приводящие к утечке памяти (невозможности гц счистить мусор).

Распространенных ошибок нет.
S>Или ссылки на доку где описывается как избегать утечек при работе со своими объектами и объектами из System и просто типами.
Не надо ничего избегать. Надо учиться пользоваться профайлером, чтобы находить причины роста занимаемой памяти.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.