Утечки памяти?
От: Flammable Россия  
Дата: 26.09.10 07:00
Оценка:
Создаю StreamReader, читаю им последовательно несколько файлов размером 10-80 МБ. Когда все прочитано, вызываю метод StreamREader.Close(), но никаких изменений в объеме выделенной памяти не происходит. Из каждого файла извлекается по единственной строке длиной ~30 символов. В результате такой обработки объем выделенной памяти подскакивает с 40 до 60 МБ. Даже 40 МБ меня пугают, не говоря уже о 60.
Подскажите, как сократить объем выделяемой памяти? Есть какие-то методы оптимизации, принудительной сборки мусора?
Re: Утечки памяти?
От: Skynin Украина skynin.blogspot.com
Дата: 26.09.10 07:43
Оценка:
Здравствуйте, Flammable, Вы писали:

F>Подскажите, как сократить объем выделяемой памяти? Есть какие-то методы оптимизации, принудительной сборки мусора?

Сборка мусора для того и сделана чтобы об освобождении памяти — НЕ думать.

Когда нужно, тогда и память и будет освобождена. В том числе и по просьбе ОСи. А если 2Гига и только ваше приложение, то:
F>Даже 40 МБ меня пугают, не говоря уже о 60.
чего именно пугаетесь? Что ОСь не просит приложение вернуть в ее распоряжение какие-то там пару десятков мегабайт?

Если Вам хочется ручного управления памятью, переходите на С++
Re[2]: Утечки памяти?
От: Flammable Россия  
Дата: 26.09.10 08:01
Оценка:
Здравствуйте, Skynin, Вы писали:

S>Здравствуйте, Flammable, Вы писали:


F>>Подскажите, как сократить объем выделяемой памяти? Есть какие-то методы оптимизации, принудительной сборки мусора?

S>Сборка мусора для того и сделана чтобы об освобождении памяти — НЕ думать.

S>Когда нужно, тогда и память и будет освобождена. В том числе и по просьбе ОСи. А если 2Гига и только ваше приложение, то:

F>>Даже 40 МБ меня пугают, не говоря уже о 60.
S>чего именно пугаетесь? Что ОСь не просит приложение вернуть в ее распоряжение какие-то там пару десятков мегабайт?

S>Если Вам хочется ручного управления памятью, переходите на С++


Программа немаленькая, уже написана. Не нравятся мне такие огромные траты памяти впустую.
Добавил после ресурсоемких операций вызов метода GC.Collect(), использование памяти стало на 5 мб меньше.

Сейчас просто загруженная форма занимает 30 мб памяти. Что можно хранить в 30 мегабайтах? Это же извращенство.. Потому и спрашиваю, может есть способы сократить объем выделяемой памяти.
Re[3]: Утечки памяти?
От: Flammable Россия  
Дата: 26.09.10 08:03
Оценка:
Кроме того меня интересует, почему StreamReader.Close() ничего не делает. Собственно, как и StreamReader.Dispose()
Re[4]: Утечки памяти?
От: GarryIV  
Дата: 26.09.10 08:09
Оценка:
Здравствуйте, Flammable, Вы писали:

F>Кроме того меня интересует, почему StreamReader.Close() ничего не делает. Собственно, как и StreamReader.Dispose()


Ну открой исходники и посмотри. Делов на пять минут.
WBR, Igor Evgrafov
Re: Утечки памяти?
От: Jolly Roger  
Дата: 26.09.10 08:11
Оценка: +4
Здравствуйте, Flammable, Вы писали:

F>В результате такой обработки объем выделенной памяти подскакивает с 40 до 60 МБ.

F>Подскажите, как сократить объем выделяемой памяти? Есть какие-то методы оптимизации, принудительной сборки мусора?

Под Windows "выделенная память" == "сферический конь в вакууме". Я бы рекомендовал для начала почитать об управлении памятью в Windows (например, у Рихтера), потом об управлении памятью NET, а также справку к диспетчеру задач (если Вы им пользуетесь) чтобы ориентироваться, какой смысл имеют значения в разных столбцах.
"Нормальные герои всегда идут в обход!"
Re[2]: Утечки памяти?
От: Pavel Dvorkin Россия  
Дата: 26.09.10 13:01
Оценка: 1 (1) +1 :))
Здравствуйте, Jolly Roger, Вы писали:

JR>Под Windows "выделенная память" == "сферический конь в вакууме". Я бы рекомендовал для начала почитать об управлении памятью в Windows (например, у Рихтера), потом об управлении памятью NET, а также справку к диспетчеру задач (если Вы им пользуетесь) чтобы ориентироваться, какой смысл имеют значения в разных столбцах.


И, добавлю, не путаться в терминологии, поскольку у меня впечатление такое, что авторы этой терминологии нас специально запутывают
With best regards
Pavel Dvorkin
Re[4]: Утечки памяти?
От: Lloyd Россия  
Дата: 26.09.10 13:22
Оценка:
Здравствуйте, Flammable, Вы писали:

F>Кроме того меня интересует, почему StreamReader.Close() ничего не делает. Собственно, как и StreamReader.Dispose()


А он и не должен ничего делать. Он ничего не держит в себе, кроме малеьнокого буфера на несколько байт.
Re[5]: Утечки памяти?
От: Flammable Россия  
Дата: 26.09.10 15:17
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Flammable, Вы писали:


F>>Кроме того меня интересует, почему StreamReader.Close() ничего не делает. Собственно, как и StreamReader.Dispose()


L>А он и не должен ничего делать. Он ничего не держит в себе, кроме малеьнокого буфера на несколько байт.


Тогда на что тратятся 20 мб памяти во время чтения файлов?
Re[6]: Утечки памяти?
От: Lloyd Россия  
Дата: 26.09.10 15:22
Оценка: +1
Здравствуйте, Flammable, Вы писали:

F>>>Кроме того меня интересует, почему StreamReader.Close() ничего не делает. Собственно, как и StreamReader.Dispose()


L>>А он и не должен ничего делать. Он ничего не держит в себе, кроме малеьнокого буфера на несколько байт.


F>Тогда на что тратятся 20 мб памяти во время чтения файлов?


Скорее всего на временные строки. Скачайте какой-нить профайлер, который умеет смотреть память .Net-ных процессов и посмотрите, на что тратится память.
Re[7]: Утечки памяти?
От: Flammable Россия  
Дата: 26.09.10 16:12
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Flammable, Вы писали:


F>>>>Кроме того меня интересует, почему StreamReader.Close() ничего не делает. Собственно, как и StreamReader.Dispose()


L>>>А он и не должен ничего делать. Он ничего не держит в себе, кроме малеьнокого буфера на несколько байт.


F>>Тогда на что тратятся 20 мб памяти во время чтения файлов?


L>Скорее всего на временные строки. Скачайте какой-нить профайлер, который умеет смотреть память .Net-ных процессов и посмотрите, на что тратится память.


И что, от этих бесполезных временных строк нельзя избавляться?
Re[8]: Утечки памяти?
От: Lloyd Россия  
Дата: 26.09.10 16:19
Оценка:
Здравствуйте, Flammable, Вы писали:

F>>>Тогда на что тратятся 20 мб памяти во время чтения файлов?


L>>Скорее всего на временные строки. Скачайте какой-нить профайлер, который умеет смотреть память .Net-ных процессов и посмотрите, на что тратится память.


F>И что, от этих бесполезных временных строк нельзя избавляться?


Можно. Когда будет нужно, сборщик мусора их соберет.
Re[9]: Утечки памяти?
От: Flammable Россия  
Дата: 26.09.10 16:26
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Flammable, Вы писали:


F>>>>Тогда на что тратятся 20 мб памяти во время чтения файлов?


L>>>Скорее всего на временные строки. Скачайте какой-нить профайлер, который умеет смотреть память .Net-ных процессов и посмотрите, на что тратится память.


F>>И что, от этих бесполезных временных строк нельзя избавляться?


L>Можно. Когда будет нужно, сборщик мусора их соберет.


Тем не менее он сборщик мусора ничего не собирает и память не освобождается.
Re[8]: Утечки памяти?
От: Jolly Roger  
Дата: 26.09.10 16:27
Оценка:
Здравствуйте, Flammable, Вы писали:

F>И что, от этих бесполезных временных строк нельзя избавляться?


Они не бесполезные, и скорее всего сборщиком уже собраны. Если не хочется углубляться в механизмы, то можно принять за аксиому, что управление памятью в Windows писали отнюдь не ламеры. NET'овскую надстройку, я думаю, тоже.
"Нормальные герои всегда идут в обход!"
Re[10]: Утечки памяти?
От: Lloyd Россия  
Дата: 26.09.10 16:28
Оценка:
Здравствуйте, Flammable, Вы писали:

F>>>И что, от этих бесполезных временных строк нельзя избавляться?


L>>Можно. Когда будет нужно, сборщик мусора их соберет.


F>Тем не менее он сборщик мусора ничего не собирает и память не освобождается.


Скачайте какой-нить профайлер, который умеет смотреть память .Net-ных процессов и посмотрите, на что тратится память.

Re: Утечки памяти?
От: notacat  
Дата: 26.09.10 20:09
Оценка:
Покажите тут в трех строках, как вы последовательно несколько файлов читаете одним ридером. Такое ощущение, что я чего-то пропустила и не представляю, как это вообще можно сделать. Прямо начиная от создания ридера, или от создания того Stream'а, который собственно файл читает. Т.е. с самого начала работы с файлами и до Close.
Скорей всего проблема вовсе не в Closе, а где-то раньше, если она вообще есть конечно
Re[2]: Утечки памяти?
От: _FRED_ Черногория
Дата: 26.09.10 20:58
Оценка:
Здравствуйте, notacat, Вы писали:

N>Покажите тут в трех строках, как вы последовательно несколько файлов читаете одним ридером.


Это очень легко: стрим, который внутри себя открывает по необходимости дополнительные стримы

Другое дело [касательно стартового сообщения] — закрывает ли…
Help will always be given at Hogwarts to those who ask for it.
Re[9]: Утечки памяти?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 26.09.10 21:06
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>Если не хочется углубляться в механизмы, то можно принять за аксиому, что управление памятью в Windows писали отнюдь не ламеры. NET'овскую надстройку, я думаю, тоже.


Только, далеко не факт, что ценности этих не-ламеров совпадают с вашими.
Ce n'est que pour vous dire ce que je vous dis.
Re[3]: Утечки памяти?
От: notacat  
Дата: 26.09.10 21:18
Оценка:
_FR>Это очень легко: стрим, который внутри себя открывает по необходимости дополнительные стримы
Ну нет, автор в вопросе вообще стримы не упоминает. В любом случае, позволю себе считать, что тогда стрим ридер был не один, а с кем-то
Лучше не гадать, а подождать пока автор код покажет. А то на догадках можно тотализатор открывать
Re[2]: Утечки памяти?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 26.09.10 21:32
Оценка:
Здравствуйте, Skynin, Вы писали:

S>чего именно пугаетесь? Что ОСь не просит приложение вернуть в ее распоряжение какие-то там пару десятков мегабайт?


Кстит, ось вообще не станет ничего просить пока не останется менее 32 МБ свободной памяти.
Ce n'est que pour vous dire ce que je vous dis.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.