2012-12-02 317 views
0

我在上下文(內存)中有實體,因爲我用Include()加載它們。LINQ to Entities this slow?

我有大約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); 
         } 
        } 

然後,它運行在100毫秒左右。

對於內存中的對象,Linq如何緩慢實體?我究竟做錯了什麼?

+0

我看到你在這些查詢查詢不同的對象 - ' tph'在第一種情況下,和'actTph'在第二種 –

+0

他們是一樣的,我編輯了我原來的帖子。 – Csabi

回答

1

OK,是我不好:(

的第一個片段是一個方法,它包含日誌/跟蹤線,這顯然使用鎖() - 裏面秒,儘管這種方法是從所謂的同一個線程,調用這些鎖相同的性能產生的foreach和LINQ查詢去掉鎖後放慢了性能

在這種情況下