簡體   English   中英

比較兩個不同LINQ語句的效率

[英]Compare efficiency of two different LINQ statements

我正在學習C#(C ++中的背景),我對LINQ表達式有疑問。 以下兩個函數都做同樣的事情(盡我所知)。 Wombats的類型是System.Data.Linq.Table<Wombat>

我很想知道

  1. 哪個更有效率?
  2. 它甚至重要嗎?
  3. 返回IQueryqble可以獲得一些東西嗎?
  4. 這里有一些禮儀更喜歡三個中的一個嗎?

我的猜測是第二種效率更高,但除非袋熊桌上有數百萬只袋熊,否則它並不重要。 返回IQueryable並不重要,因為我們只返回一個袋熊。

提前致謝!

    public static DBConnector.Connections.Wombat getWombat(String wombatID)
    {
        var db = getDBInstance();
        return db.Wombats.FirstOrDefault(x => x.ID.ToString() == wombatID);
    }

    public static DBConnector.Connections.Wombat getWombat(String wombatID)
    {
        var db = getDBInstance();
        var guid = new System.Guid(wombatID);
        return db.Wombats.FirstOrDefault(x => x.ID == guid);
    }

這完全取決於DB的LINQ提供程序,以及它如何將其轉換為SQL。 您可以分析生成的SQL (甚至只是檢查SQL跟蹤 )並確定哪個更有效。

我懷疑大多數提供商將使用第二個選項做得更好,因為實際檢查將是相同的類型 - 服務器上的查詢不需要將每一行轉換為字符串,並通過字符串比較進行比較。 這可能會使索引工作正常,並使其更有效。 話雖這么說,一個聰明的提供者可以為你做這個轉換,在這種情況下,兩個選項可能是相同的。

你的猜測是正確的,第二個查詢可能更有效,因為它會解析一次GUID而不是將每行中的GUID轉換為字符串。 查詢提供程序可以優化它,但它不必; 您的查詢提供程序也可能會選擇將GUID轉換為字符串進行比較,但這將是一個相當不幸的選擇。

假設除非表中有大量的Wombat對象,否則你也是正確的。

支持第二個查詢有一個顯着的區別:查詢提供程序可能無法識別ToString方法,因此由於運行時錯誤,您的第一個查詢甚至都不會執行。

  1. 查看每個案例生成的sql。
  2. 檢查sql studio中每個查詢的執行時間,查詢計划和IO。
  3. ???
  4. 利潤。

如果您返回IQuerable,則可能會延遲評估,從而允許其他人首先更新該值。

暫無
暫無

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

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