我在我的視圖中使用foreach
來遍歷我的強類型模型並顯示一個表。只有25行和7列,大約需要280毫秒。這似乎很慢。有什麼性能訣竅,我應該知道在視圖中使用循環?爲什麼我的foreach在ASP.NET MVC視圖中循環如此緩慢?
編輯:我的控制器從Azure表中獲取數據並使用ViewModel模式將其提供給視圖。我不知道這是否重要,但我的視圖是在VB中,我的模型是在C#中。所以,他們在單獨的項目。我會想出一個精簡的例子來發布,但我現在已經走出了門,今晚晚些時候將不得不去做這件事。我希望在人們週末回家之前趕上StackOverflow的人羣,所以我原來的帖子很快就沒有示例代碼。
編輯:我確認與提琴手,沒有懶加載發生。視圖渲染過程中沒有Fiddler活動。
編輯:如果我用Azure表中的數據提供視圖,則需要280毫秒。如果我使用與Azure表中的實際數據相似的假數據提供相同的視圖,則需要60毫秒。無論哪種情況,Controller都會填充ViewModel對象並將其傳遞給View。兩個實例都使用相同的ViewModel類。我不明白。
編輯:我想我想通了。如果我一開始就包含代碼,這對其他人來說可能是顯而易見的。這裏是我的ViewModel:
public class EmployeeChildrenViewModel
{
public Employee employee;
public IEnumerable<Child> children;
}
如果我通過上面的視圖模型以我看來,foreach
需要280毫秒。如果我先用children.ToList()
填充上面的ViewModel,那麼視圖只需要60毫秒。但是,經過進一步調查,我發現無論哪種情況,整個頁面加載時間都是相同的。我猜這是沒有關係,如果IEnumerable迭代在我的控制器或我的看法,因爲整體效果是相同的。我仍然不確定在children
上迭代的結果是什麼,因爲我確信它不會觸及數據庫,正如Fiddler所確認的那樣。
告訴我們你遍歷什麼,也許這是很重的東西,你沒有意識到這一點。你沒有給我們關於這個問題的信息。 – Karl 2009-10-09 21:09:10
向我們展示一些代碼? – 2009-10-09 21:11:17
@ eu-ge-ne&@Karl:對不起,我一開始應該這樣做。代碼現在發佈。 – royco 2009-10-10 17:28:59