0
我正在使用EntityFrameowrk 4和WinForms。 我有一個DataGridView顯示5到12千條記錄。記錄來自不同層次的層次結構。有類 A,B,C,D的記錄,其中A包含B的集合,B包含C的集合等。最多的類是D.在DataGridView中,此層次結構被展平並顯示每條記錄在一些顏色/字體格式的行中。做這類渲染我寫了下面的代碼:EntityFramework性能問題
foreach (a in A)
{
var displayObjectA = new DisplayObject()
{
Name = a.Name,
Code = "Section",
Object = a
}
data.Add(displayObjectA);
var B = a.B;
foreach (b in B)
{
var displayObjectB = new DisplayObject()
{
Name = b.Name,
Code = "Subsection",
Object = b
}
data.Add(displayObjectB);
var C = b.C;
foreach (c in C)
{
var displayObjectC = new DisplayObject()
{
Name = c.Name,
Code = "Group",
Object = c
}
data.Add(displayObjectC);
var D = c.D;
foreach (d in D)
{
var displayObjectD = new DisplayObject()
{
Name = d.Name,
Code = d.Code,
Object = d
}
data.Add(displayObjectD);
}
}
}
}
後該數據在DataGridView dispayed。 問題是,這種渲染花費的時間太長。並消耗部分時間最多的似乎是行
foreach (d in D)
特別
調用一個函數
System.Data.Objects.DataClasses.EntityCollection<T>.GetEnumerator().
當我看着在反射板的功能,這表明它的機身是空的。
我的問題是:
- 有沒有更好的方式來做到這類型的渲染?
- 如何提高性能?
- 爲什麼GetEnumerator()是空的?它是在運行時構建的嗎?
* 5至12千條記錄*?使用分頁。爲什麼在屏幕上只顯示最後只有10-20個記錄時會記錄如此多的記錄? – 2010-05-29 11:46:05
這就是我問客戶的問題。但他要求所有的記錄都會被提取。 – Max 2010-05-29 14:50:55