Как я могу заставить сжатие DataTable и / или List, чтобы я мог эффективно освободить память? В настоящее время я удаляю обработанную строку из набора данных каждую итерацию цикла, но я не уверен, освобождается ли память.
for (int i = m_TotalNumberOfLocalRows - 1; i >= 0; i--)
{
dr = dt.Rows[i];
// Do stuff
dt.Rows.Remove(dr);
}
Если это не уменьшит объем памяти DataTable в памяти, я могу использовать список. Я использую только DataTable в качестве хранилища для DataRows, я мог бы использовать любой механизм сбора или хранения, который бы занимал мало памяти и мог высвобождать память каждые x итераций.
Спасибо.
Edit:
После некоторого профилирования памяти после прочтения Что такое хорошие профилировщики .NET? Я обнаружил, что основным потребителем памяти являются строки.
Во время этого процесса мы делаем много пользовательского вывода, и потребление памяти колеблется между 170 МБ и 230 МБ, достигая пика в 300 МБ. Я использую StringBuilder с начальным размером 20971520 для хранения вывода / журнала происходящего, и после обработки одного процента от общего числа записей я устанавливаю свойство Text элемента управления DevExpress MemoEdit в StringBuilder.ToString. (). Я обнаружил, что этот метод быстрее, чем добавление StringBuilder.ToString () к MemoEdit.Text (очевидно, логика w.r.t. StringBuilder отличается между добавлением и настройкой MemoEdit.Text)
Я также обнаружил, что вместо воссоздания StringBuilder (20971520) память становится проще и быстрее выполняется до StringBuilder.Remove(0, StringBuilder.Length)
Есть ли какие-либо советы, которыми вы могли бы поделиться для повышения производительности при работе с большими строками (записанный файл журнала, содержащий журнал, составляет примерно 12,2 МБ для примерно 30 000 записей)?
Примечание. Я изменил название вопроса и теги.
Старое название: Как я могу вызвать сжатие DataTable и / или списка для освобождения памяти?
Старые теги: список данных c # .net memory