Использую MemoryStream в сочетании со StreamWriter-ом и архиватором. Поскольку таких операций выполняется много и часто, хочется использовать MemoryStream повторно, а не создавать каждый раз новый буффер (не очень маленький к тому же). Однако при вызове Dispose у StreamWriter-а вызывается Dispose моего MemoryStream. Что бы сделать такое, чтобы MemoryStream можно было повторно использовать?
Мне пока приходит в голову только сделать обёртку над ним и не закрывать его при вызове Dispose, но может есть способ лучше/проще/стандартный ?
Здравствуйте, hell citizen, Вы писали:
HC>Мне пока приходит в голову только сделать обёртку над ним и не закрывать его при вызове Dispose, но может есть способ лучше/проще/стандартный ?
Ага. Не заниматься фигней и дать MemoryStream'у умереть.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Ага. Не заниматься фигней и дать MemoryStream'у умереть.
Отвратительный совет. Если так делать, съедается слишком много памяти.
Здравствуйте, hell citizen, Вы писали:
HC>Отвратительный совет. Если так делать, съедается слишком много памяти.
А тебе не пофигу?
Тем болие что .NET мониторит \KernelObjects\LowMemoryCondition и если памяти будет мало он ее быстренько отдаст.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, hell citizen, Вы писали:
WH>>Ага. Не заниматься фигней и дать MemoryStream'у умереть. HC>Отвратительный совет. Если так делать, съедается слишком много памяти.
Используйте MemoryStream(byte[] buffer) — в этом случае размер MemoryStream будет ограничен размером буфера. Или придется делать свою собственную реализацию
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, WolfHound, Вы писали:
WH>А тебе не пофигу?
Нет, не пофигу. Это сервер и он не целиком мой.
WH>Тем болие что .NET мониторит \KernelObjects\LowMemoryCondition и если памяти будет мало он ее быстренько отдаст.
Не так быстренько, как кажется. % Time in GC зашкаливает за 10.
К тому же были прецеденты, когда GC просто помирал от такого отношения. Нежный он очень.
Здравствуйте, TK, Вы писали:
TK>Используйте MemoryStream(byte[] buffer) — в этом случае размер MemoryStream будет ограничен размером буфера. Или придется делать свою собственную реализацию.
К сожалению, нет возможсти предсказать размер выходного буффера. Я использую Capacity заведомо большую, чем этот размер, но это не спасает. Их там действительно много. По моим прикидкам единственное, что может помочь, это правило "один буффер на одну сессию".
Здравствуйте, hell citizen, Вы писали:
HC>К сожалению, нет возможсти предсказать размер выходного буффера. Я использую Capacity заведомо большую, чем этот размер, но это не спасает. Их там действительно много. По моим прикидкам единственное, что может помочь, это правило "один буффер на одну сессию".
HC>Похоже, придётся делать обёртку.
В Remoting примерно так и сделано.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.