Entity framework удаляет объект из контекста, но не из базы данных

Я работаю над пакетным процессом, который выгружает ~800 000 записей из медленной устаревшей базы данных (1,4-2 мс на время выборки записи... это суммируется) в MySQL, который может немного Быстрее. Чтобы оптимизировать это, я загружал все записи MySQL в память, что увеличивает использование примерно до 200 МБ. Затем я начинаю делать дамп из устаревшей базы данных и обновлять записи.

Первоначально, когда это завершало обновление записей, я вызывал SaveContext, что затем увеличивало объем моей памяти с ~500–800 МБ до 1,5 ГБ.Очень скоро я бы избавился от исключений памяти (виртуальная машина, на которой это работает, имеет 2 ГБ ОЗУ), и даже если бы я дал ей больше ОЗУ, 1,5-2 ГБ все еще немного избыточно, и это было бы просто добавлением полосы -помощь в проблеме. Чтобы исправить это, я начал вызывать SaveContext каждые 10 000 записей, что немного помогло, и, поскольку я использовал делегатов для извлечения данных из устаревшей базы данных и обновления их в MySQL, я не получил слишком ужасного удара по производительности, так как после Подождите 5 секунд или около того, пока он будет сохраняться, затем он запустит обновление в памяти для 3000 или около того записей, для которых было выполнено резервное копирование. Тем не менее, использование памяти продолжает расти.

Вот мои потенциальные проблемы:

  • Данные поступают из устаревшей базы данных в любом порядке, поэтому я не могу разбивать обновления и периодически выпускать ObjectContext.
  • Если я не извлекаю все данные из MySQL заранее, а вместо этого просматриваю их в процессе обновления по записи, это невероятно медленно. Вместо этого я беру все это заранее, привожу в словарь, индексированный по первичному ключу, и по мере обновления данных удаляю записи из словаря.

Одно из возможных решений, о котором я подумал, — это каким-то образом освободить память, используемую сущностями, к которым, как я знаю, я больше никогда не прикоснусь, поскольку они уже были обновлены (например, очистка кеша, но только для определенного элемента), но я не не знаю, возможно ли это вообще с Entity Framework.

Есть у кого мысли?

7
задан Los Frijoles 29 June 2012 в 00:19
поделиться