Должен ли я сохранять свои объекты в памяти после использования EF для их извлечения и создания? - PullRequest
1 голос
/ 19 марта 2012

Я использую EF для получения и создания некоторых объектов из моей базы данных. Мне нужны эти объекты в двух разных итерациях. На первой итерации я получаю их из своей базы данных. Во втором мне нужно снова использовать объекты.

Будет ли вторая итерация быстрее, если я сохраню объекты в списке в памяти вместо того, чтобы снова извлекать их из базы данных, или EF сохранит их в памяти, потому что они недавно использовались?

Ответы [ 5 ]

1 голос
/ 19 марта 2012

Конечно, извлечение из памяти происходит намного быстрее.Кстати, если вы хотите получить объект из памяти, вам не нужно сохранять его в списке, просто используйте Local одну из функций EF.

1 голос
/ 19 марта 2012

Если вы не отключите отслеживание, EF сохранит запрошенные объекты в памяти в течение всего времени существования объекта DbContext.

Если вы не хотите обновлять объекты, я бы порекомендовал сделать это, сохранив их в памяти, не сохраняя их в DBcontext, так как это повысит производительность.Вы можете сделать это, добавив .AsNoTracking () к вашему запросу.

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

1 голос
/ 19 марта 2012

Вы должны Load объекты в памяти, как это, чтобы они были доступны с помощью свойства Local:

 context.YourTable.Load();

и затем вы должны использовать свойство Local для итерации столько раз, сколько захотите.

foreach(var obj in context.YourTable.Local) {
 ////
}

Вы также можете использовать ToList(), чтобы ваши предметы были загружены в память

0 голосов
/ 19 марта 2012

попробуйте использовать подход кэширования, особенно для объектов, которые не нужно часто менять

0 голосов
/ 19 марта 2012

Ну, если они вам нужны сразу после, почему бы просто не сохранить их в памяти?Вы храните только ссылки на объекты, которые имеют малый вес.

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