Память строк не освобождается в конце метода? - PullRequest
0 голосов
/ 04 мая 2018

Я работаю над конвертером xml в csv и обнаружил, что моя программа может использовать слишком много памяти из этой части:

using (StreamReader sr = File.OpenText(txtFileLocation))
{
    string s = sr.ReadToEnd();
    s = s.Replace("
", "");
    xml.LoadXml(s);
}

Дело в том, что когда строковая переменная установлена, мое приложение занимает до 200 месяцев памяти, затем, когда я загружаю его в мой XmlDocument, оно достигает 400, но не освобождает строки (или это StreamReader?) 200мес позже (кроме случаев, когда я снова запускаю этот метод).

Эта большая часть памяти берется из исходного файла в 40 месяцев, поэтому я думаю, что это может ухудшиться, если я попытаюсь конвертировать большие файлы. Отсюда мой вопрос, (как) я могу освободить этот избыток использования памяти?

1 Ответ

0 голосов
/ 04 мая 2018

Откуда вы знаете, что память не используется потоковым считывателем или только что загруженным объектом XML? Где определяется xml?

Сколько памяти слишком много? Какой лучший способ решить. .Net, в целом, "управляемый" и заботится об управлении памятью для вас. Не вмешивайтесь и не беспокойтесь, если у вас действительно нет проблем. Просто включите переменные области видимости, вызовите dispose, когда это возможно. Если вы используете «неуправляемые» ресурсы, вам нужно правильно реализовать IDisposable (здесь это не применимо).

Если вы обеспокоены тем, что файл будет очень большим, не читайте все сразу, читайте построчно. Тем не менее, вы все еще загружаете это в xml, поэтому потребуется другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...