2014-11-19 14 views
0

많은 양 (수천 행)의 데이터를 준비하고 Entity Framework를 통해 데이터베이스에 삽입하는 동안 Entity 개체 또는 메모리 내 개체 그래프를 만드는 것은 많은 메모리를 차지하지 않지만 SaveChanges() 메서드 메서드가 반환 될 때까지 메모리 양이 계속 소모됩니다.왜 SaveChanges 메서드가 메모리를 차지합니까?

이 메모리를 소비하는 SaveChanges() 호출 기간 동안 정확히 무슨 일이 발생 했습니까?

답변

1

오브젝트 그래프의 깊이에 따라 그래프가 깊어 질수록 더 많은 메모리가 소비됩니다. 일반적으로 당신이 SaveChanges를 호출 한 후 일이 더 비용이 많이 드는 작업은 다음과 같습니다

  • 뷰는 쿼리 생성됩니다 EF 모델에 대해 쿼리를 실행하기 전에, 그것은 액세스 할 지역 쿼리 뷰 AA 세트를 생성한다 데이터 베이스. 개체 그래프가 복잡할수록보기가 복잡해 지지만 미리 생성하여 성능을 향상시킬 수는 있습니다.
  • 쿼리가 준비됩니다. EF는 쿼리 명령을 작성하고 메타 데이터를 기반으로 명령 트리를 생성합니다. 다시 말해 쿼리 복잡성이 증가하면서 비용이 증가합니다.

실제로 쿼리를 실행하는 비용은 상대적으로 낮습니다. 자세한 내용은 here을 참조하십시오.

일반적으로 EF로 대량 삽입하기위한 특별한 전략을 사용하는 것이 좋습니다. here을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. +1 나는 당신의 ID가 정말로 마음에 든다.) 그리고 링크도 도움이되었다. 당신이 초점을 맞추었던 두 가지 점은 기억보다는 실행 시간이 더 많이 소요되는 것처럼 보입니다. (나는 아직 첫 번째 링크를 자세히 조사하지 않았습니다.) 그러나 어쨌든, 컨텍스트가 삭제되면 어떤 메모리를 사용하더라도 해제해야합니다. 맞습니까? 내 시나리오 중 하나에서 일어나는 일이 아니기 때문에 나는 묻고있다. 나는 그것에 관해 또 다른 질문을 게시 할 것이다. – atiyar