Вы смотрите на ОЗУ, используемую самим процессом? Я бы не ожидал, что это спустится. Процесс будет зависать в этой памяти и повторно использовать его для дальнейших распределений. Он не возвращает его в операционную систему. Именно так работает .NET.
может потенциально получить его, чтобы выбросить память с помощью какого-либо вызова API CLR, но обычно я этого не делал.
Это не означает, что память действительно просочилась - она по-прежнему может использоваться одним и тем же процессом. Например, если вы повторите одно и то же действие, вероятно, не нужно будет увеличивать размер кучи - вы увидите, что использование памяти остается равным на уровне процесса. Используйте графики perfmon CLR, чтобы увидеть память, используемую в управляемой куче, чтобы увидеть, есть ли утечка подлинных.
(Есть также различные другие меры, сколько памяти приложение на самом деле с помощью которого один Интересно, зависит от того, что вы пытаетесь сделать.).
EDIT: Если фрагмент кода действительно свидетельствует о код, который вы используете, тогда есть гораздо более простая альтернатива: поток данных.
using (TextWriter writer = File.CreateText("tempFile.txt"))
{
CopyText(reader, writer);
}
static void CopyText(TextReader reader, TextWriter writer)
{
char[] buffer = new char[8192];
int charsRead;
while ((charsRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
writer.Write(buffer, 0, charsRead);
}
}
Обратите внимание, что если вы не на самом деле изменения кодировки, вы можете сделать это без использования пара TextWriter
/TextReader
, чтобы начать с.
Таким образом вам не понадобится целая строка в памяти , а также ее двоичное представление (в MemoryStream
). Конечно, у вас все равно будет двоичное представление - у вас есть, чтобы написать все в MemoryStream
?
Я рекомендую использовать профилировщик производительности для вашего приложения. Вы можете обнаружить, что проблемы с производительностью, с которыми вы сталкиваетесь, на самом деле не имеют ничего общего с сообщением об объеме памяти. В зависимости от того, сколько данных вы записываете на диск, вполне вероятно, что больший виновник, влияющий на другие процессы, является соперничеством с дисковыми ресурсами ввода-вывода. Память действительно не должна быть проблемой производительности (насколько влияет на другие процессы), пока вы на самом деле не переполнили физическую RAM и не вызвали значительный пейджинг на диске. –