2012-12-02 3 views
0

Include()로로드했기 때문에 컨텍스트 (메모리)에 엔티티가 있습니다.엔티티에 LINQ가이 속도가 느립니까?

내가 약 25 개체 (TPH)가, 그리고 그들 각각에 대해 다음 쿼리를 실행 해요 :

actTph.TrainingProgramHistory_ConditionAndLoadParameter.Where(x => x.Level == 10).Select(x => x.ConditionAndLoadParameter).ToArray(); 

TrainingProgramHistory_ConditionAndLoadParameter, 그리고 TrainingProgramHistory_ConditionAndLoadParameter.ConditionAndLoadParameters 메모리에, 이러한 쿼리가 실행될 때 때문에, SQL 프로필은 아무 것도 기록하지 않습니다.

각 TPH에는 약 20 개의 TrainingProgramHistory_ConditionAndLoadParameter 관련 엔티티가 있습니다.

25 번 (내 25 개의 TPH 엔티티에서)이 쿼리를 실행하는 데 약 3 초가 걸립니다!

나는이에 리팩토링 경우

List<ConditionAndLoadParameter> measuredCalps = new List<ConditionAndLoadParameter>(); 
        foreach (TrainingProgramHistory_ConditionAndLoadParameter tphCalp in actTph.TrainingProgramHistory_ConditionAndLoadParameter) 
        { 
         if (tphCalp.Level == 10) 
         { 
          measuredCalps.Add(tphCalp.ConditionAndLoadParameter); 
         } 
        } 

는 그 다음은 100msec로 정도에서 실행됩니다.

Linq to Entities는 메모리 내 개체에 대해 어떻게 느린가요? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

-.. ' 첫 번째 경우에는 tph, 두 번째 경우에는 actTph가됩니다. –

+0

그들은 동일합니다. 나는 원래 게시물을 편집했습니다. – Csabi

답변

1

OK, 내 나쁜 :(

첫 번째 조각은 분명히() 잠금을 사용하는 로그/추적 라인을 포함하는 방법에이었다 - 그 안에의,이 방법은에서를 했더라도, 이 잠금 장치를 호출 같은 스레드 성능을 둔화

을이 경우 동일한 성능에 대한 생산의 foreach와 LINQ 쿼리 잠금 장치를 제거한 후 난 당신이 이러한 쿼리에 다른 개체를 쿼리하는 것을 볼

관련 문제