2011-01-22 110 views
3
using (var nosql = new DbHelper("Feed")) 
{ 
    var watch = Stopwatch.StartNew(); 
    nosql.CollectionName = "rawhi"; 
    var x = nosql.GetRecords<Event>(p => true, 0, 1000000); 
    //GridView1.DataSource = x; 
    //GridView1.DataBind(); 
    watch.Stop(); 
    long milliseconds = watch.ElapsedMilliseconds; 
    Response.Write(milliseconds); 
} 

xIQueryable類型的變量。IQueryable的結構是什麼?

當我運行這段代碼的結果是:0

因此,如果數據被存儲在x VAR與否我不知道?

+0

在`watch.Stop()`之前嘗試`x.ToList();`。 – 2011-01-22 16:35:42

回答

4

該查詢將被懶惰地評估,因此,直到某事嘗試枚舉結果,查詢實際上並未執行或結果返回。在你的代碼示例中,你已經設置了查詢,但是你並沒有真正運行它。如果你把你的數據綁定代碼放回去,那實際上會枚舉結果並執行它。

出於測試目的,你可以強制列舉如下:

x.ToList(); 
0

你只設置了管道可以這麼說 - 你現在就可以檢索通過x的結果,但他們懶洋洋地,只有當你檢索做到這一點。

您可以通過一個檢索它們一個:

foreach(var item in x) 
{ 
    //do something 
} 

有時它有利於熱切檢索數據,在這種情況下,你可以使用ToList()其中列舉了國內所有的結果,並將結果在X設置 - 然後你可以測量需要多長時間:

var x = nosql.GetRecords<Event>(p => true, 0, 1000000).ToList();