Повторное использование MemoryStream
От: hell citizen Россия  
Дата: 19.02.08 13:35
Оценка:
Использую MemoryStream в сочетании со StreamWriter-ом и архиватором. Поскольку таких операций выполняется много и часто, хочется использовать MemoryStream повторно, а не создавать каждый раз новый буффер (не очень маленький к тому же). Однако при вызове Dispose у StreamWriter-а вызывается Dispose моего MemoryStream. Что бы сделать такое, чтобы MemoryStream можно было повторно использовать?
Мне пока приходит в голову только сделать обёртку над ним и не закрывать его при вызове Dispose, но может есть способ лучше/проще/стандартный ?
Re: Повторное использование MemoryStream
От: WolfHound  
Дата: 19.02.08 13:46
Оценка: +1 -1
Здравствуйте, hell citizen, Вы писали:

HC>Мне пока приходит в голову только сделать обёртку над ним и не закрывать его при вызове Dispose, но может есть способ лучше/проще/стандартный ?

Ага. Не заниматься фигней и дать MemoryStream'у умереть.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Повторное использование MemoryStream
От: hell citizen Россия  
Дата: 19.02.08 14:09
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ага. Не заниматься фигней и дать MemoryStream'у умереть.

Отвратительный совет. Если так делать, съедается слишком много памяти.
Re[3]: Повторное использование MemoryStream
От: WolfHound  
Дата: 19.02.08 14:14
Оценка: :)
Здравствуйте, hell citizen, Вы писали:

HC>Отвратительный совет. Если так делать, съедается слишком много памяти.

А тебе не пофигу?
Тем болие что .NET мониторит \KernelObjects\LowMemoryCondition и если памяти будет мало он ее быстренько отдаст.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Повторное использование MemoryStream
От: TK Лес кывт.рф
Дата: 19.02.08 14:20
Оценка:
Здравствуйте, hell citizen, Вы писали:

WH>>Ага. Не заниматься фигней и дать MemoryStream'у умереть.

HC>Отвратительный совет. Если так делать, съедается слишком много памяти.

Используйте MemoryStream(byte[] buffer) — в этом случае размер MemoryStream будет ограничен размером буфера. Или придется делать свою собственную реализацию
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Повторное использование MemoryStream
От: hell citizen Россия  
Дата: 19.02.08 14:22
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>А тебе не пофигу?

Нет, не пофигу. Это сервер и он не целиком мой.

WH>Тем болие что .NET мониторит \KernelObjects\LowMemoryCondition и если памяти будет мало он ее быстренько отдаст.

Не так быстренько, как кажется. % Time in GC зашкаливает за 10.
К тому же были прецеденты, когда GC просто помирал от такого отношения. Нежный он очень.
Re[4]: Повторное использование MemoryStream
От: hell citizen Россия  
Дата: 19.02.08 14:57
Оценка:
Здравствуйте, TK, Вы писали:

TK>Используйте MemoryStream(byte[] buffer) — в этом случае размер MemoryStream будет ограничен размером буфера. Или придется делать свою собственную реализацию.


К сожалению, нет возможсти предсказать размер выходного буффера. Я использую Capacity заведомо большую, чем этот размер, но это не спасает. Их там действительно много. По моим прикидкам единственное, что может помочь, это правило "один буффер на одну сессию".

Похоже, придётся делать обёртку.
Re[5]: Повторное использование MemoryStream
От: TK Лес кывт.рф
Дата: 19.02.08 15:06
Оценка:
Здравствуйте, hell citizen, Вы писали:

HC>К сожалению, нет возможсти предсказать размер выходного буффера. Я использую Capacity заведомо большую, чем этот размер, но это не спасает. Их там действительно много. По моим прикидкам единственное, что может помочь, это правило "один буффер на одну сессию".


HC>Похоже, придётся делать обёртку.


В Remoting примерно так и сделано.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.