簡體   English   中英

編譯查詢和普通查詢對我實體框架似乎沒有區別

[英]Compiled query and normal query, seems no difference for me entity framework

我停留在已編譯查詢和普通查詢中,自3天以來一直在進行此操作,但是找不到線索為什么會發生這種情況,請幫幫我。

我有一張表是“要約”,其中包含3500條記錄。 我寫了兩種查詢,一種是編譯查詢,另一種是普通查詢。 參見下面的代碼。

編譯查詢。

public static class TestCompiled
{        
    private static readonly Func<MyEntity, DateTime, IEnumerable<Offer>> activeOfferCQ =
        CompiledQuery.Compile(
          (MyEntity context, DateTime currentTime) =>
              context.Offers.Where(o => (o.Organization == null || (o.Organization != null && o.Organization.IsActive == true))));

    public static IEnumerable<Offer> GetBesicActiveOffers(MyEntity DBContext, DateTime currentTime)
    {
        return activeOfferCQ.Invoke(DBContext, currentTime);
    }
}

這是我的已編譯查詢,並且我已經創建了控制台應用程序以比較這些已編譯查詢和正常查詢,以下是代碼。

履行

MyEntity context = new MyEntity ();

for (int i = 0; i < 5; i++)
{
    var temp = i + 1;
    sp.Start();
    List<Offer> objOffers = context.Offers.Where(x =>(x.Organization == null || (x.Organization != null && x.Organization.IsActive == true))).ToList();
    Console.WriteLine("SrN: " + (temp) + "  Q1= " + sp.Elapsed.Milliseconds + "    Record Count=" + objOffers.Count());
    sp.Stop();

    sp.Start();
    List<Offer> objList = TestCompiled.GetBesicActiveOffers(context, curtime).ToList();
    Console.WriteLine("SrN: " + (temp) + "  Q2= " + sp.Elapsed.Milliseconds + "    Record Count=" + objList.Count());
    sp.Stop();
    Console.WriteLine("______________________________________________________________");
    Console.WriteLine();
    //if (i == 0)
    Thread.Sleep(5000);
}

結果。

檢查結果: 在此處輸入圖片說明

當我發現普通查詢的運行速度比編譯查詢快時,因為我們知道編譯查詢比普通查詢快,請幫助我我做錯了什么。 我是否在編譯查詢中缺少任何內容。

由於時間和變化如此之小,我認為查詢的編譯時間(看起來很簡單)不會產生任何重大變化。

顧名思義,EF中的已編譯查詢避免了編譯查詢的開銷。 它實際上並沒有幫助數據庫查詢時間或數據傳輸時間。 由於查詢的編譯時間(即SQL語句的創建時間)可以忽略不計,因此您基本上看不到任何差異(或很小的差異)。

附帶說明:您在已編譯查詢中使用的DateTime參數在查詢本身中未使用...我不認為在這種精確的情況下它確實會影響查詢編譯時間,但是對於性能測試而言,似乎很奇怪。 您應該嘗試在相同條件下衡量性能。

PS :使用DbContext和EF(從版本5開始)時,不直接支持已編譯的查詢,已經在其認為合適的地方緩存了查詢(它們稱為“自動編譯的查詢”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM