Таблица NewRow () вызывает утечку памяти

когда я делал подобные вещи, прежде чем попытался разделить вещи на две части:

  1. «отправка кода» (может быть несколькими потоками), это устанавливает, где ответы должны перейти к (то есть dict из id с для функций или Future с), затем отправляет запрос и блокирует для ответа
  2. «принимающий код» (возможно, один поток на сокет), который отслеживает весь входящий трафик и передает ответы тому, какой код заинтересован в id. это также разумное место для обработки неожиданно закрытого сокета, который должен выдвигать исключение соответствующим образом

Это, вероятно, несколько сотен строк кода и довольно специфично для приложения…

7
задан Simon Keep 28 October 2008 в 09:15
поделиться

3 ответа

DataRow наследовал схему от DataTable, таким образом, существуют ссылки от DataRow до схемы таблицы, которая генерировала строку. Новая строка находится в Отдельном состоянии в таблице.
это - то, почему GC оставил новые неиспользованные строки в покое.

6
ответ дан 6 December 2019 в 19:44
поделиться

DataTable. NewRow () добавляет созданную строку к RecordManager DataTable. Я не совсем уверен, почему это происходит, но это - то, почему это не освобождено GC.

Кажется, что существует только два способа избавиться от DataRow:

  1. Добавьте его к таблице, затем удалите его.
  2. Назовите DataTable. Ясный ().
6
ответ дан 6 December 2019 в 19:44
поделиться

Я думаю, что Ваши две проблемы связаны.

Таблица. NewRow создает новую строку данных, которая имеет тот же формат столбца как начальная Таблица.

Эта новая строка должна быть добавлена к таблице использования таблицы. Строки. Добавьте (newRow). Ваш цикл будет создавать объекты, которые никогда не используются и следовательно съедят память. См. эту статью для получения дополнительной информации http://msdn.microsoft.com/en-us/library/system.data.datatable.newrow.aspx

1
ответ дан 6 December 2019 в 19:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: