Страницы

Поиск по вопросам

понедельник, 18 марта 2019 г.

Entity Framework и сборщик мусора

Собирает ли сборщик мусора, коллекции записей, которые были материализованы EF? В одном потоке создаются сущности и вставляются в конкурентную очередь, а затем в другом потоке идет вставка N сущностей в навигационное свойство с последующим SaveChanges. Объекты уничтожаются после SaveChanges?
Или все привязано к контексту и нужно его пересоздавать?


Ответ

1) Да, конечно. Грубо говоря, сборщик мусора очищает всю память, на которую не указывает ни один указатель в процессе. То есть если вы не храните в переменных ссылки на эти коллекции и контекст БД был "уничтожен", то сборщик мусора очистит память (в удобный для него момент времени).
2) После SaveChanges нет. Все сохраненные сущности останутся в полях Local соответствующих DbSet'ов. Поэтому сборщик мусора не сможет очистить выделенную для них память. Дальше два варианта развития событий: 1) вы забудете о ссылке на DbContext, сборщик мусора уничтожит его, потом уничтожит и сущности. 2) вы не забудете о контексте и вызовите Dispose для него, так как он вам больше не нужен.. тогда метод Dispose уничтожит и контекст и все сущности с ним связанные.

Комментариев нет:

Отправить комментарий