2012-03-19 2 views
1

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

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

+0

Было бы хорошо, чтобы дать пример, не ясно, разница между первой итерации и второй итерации. Что вы понимаете, сохраняя объекты в списке? –

+0

Да, я тоже не вижу проблемы. Ответ кажется довольно очевидным. Но вы можете попросить все возможности, которые предлагает EF? – squelos

ответ

0

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

1

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

context.YourTable.Load(); 

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

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

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

1

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

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

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

1

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

0

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

Смежные вопросы