2012-03-19 2 views
1

EF를 사용하여 데이터베이스에서 일부 개체를 가져오고 만듭니다. 두 개의 다른 반복에서 이러한 객체가 필요합니다. 첫 번째 반복에서는 데이터베이스에서 가져옵니다. 두 번째 개체를 다시 사용해야합니다.EF를 사용하여 개체를 검색하고 만든 후에 개체를 메모리에 저장해야합니까?

데이터베이스에서 개체를 다시 검색하는 대신 메모리에있는 목록에 개체를 저장 한 경우 두 번째 반복이 더 빠릅니까? 아니면 EF가 최근에 사용 되었기 때문에 메모리에 저장합니까?

context.YourTable.Load(); 

을 그리고 당신은 당신이 원하는만큼을위한 반복하는 Local 속성을 사용한다 : 그들은 액세스 할 수 있도록

+0

이 좋은 것입니다 변경할 수 특히이없는 개체에 대한 캐싱 방법을 사용하려고합니다. 개체를 목록에 저장하면 무엇을 의미합니까? –

+0

네, 여기서도 문제를 볼 수 없습니다. 대답은 실제로 아주 명백하게 보인다. 그러나 EF가 제공하는 다양한 가능성을 모두 물어볼 수도 있습니다. – squelos

답변

0

잘 메모리에로드 할 수 있도록 사용할 수 있습니까? 경량 인 객체에 대한 참조 만 저장하고 있습니다.

1

당신은 Local 속성을 사용하여, 같은 메모리의 개체를 Load한다.

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

또한 ToList() 당신이 그들을 그냥 후, 왜 단순히 메모리에 보관이 필요한 경우 항목이

1

추적을 사용하지 않으면 EF는 DbContext 개체의 수명 동안 메모리에서 개체를 쿼리하도록 유지합니다.

개체를 업데이트하고 싶지 않은 경우 DBcontext에 저장하지 않고 메모리에 저장하여 개체를 업데이트하는 것이 좋습니다. 이렇게하면 성능이 향상되므로이 작업을 수행하는 것이 좋습니다. .AsNoTracking()을 쿼리에 추가하여이 작업을 수행 할 수 있습니다.

컨텍스트의 수명주기 이상으로 개체를 유지하려면 메모리에 캐싱하여 개체를 유지하면됩니다. 그런 다음 나중에 다시 첨부하여 나중에 업데이트 할 수 있습니다.

1

물론 메모리에서 검색하는 것은 훨씬 빠릅니다. BTW 메모리에서 객체를 가져 오려면 목록에 저장할 필요가 없으므로 Local EF 기능 중 하나를 사용하십시오.

0

는 첫 번째 반복하고 두 번째 반복의 차이를 분명하지 않다, 예를 제공하는 것이

관련 문제