2

爲了提高我們的MVC3應用程序的性能,我們希望將某些Controller標記爲AsyncController。 我們使用EF 4.x(最新穩定),並需要一些建議,鏈接如何以正確的方式對EF進行異步調用。如何處置實體等用於從實體框架異步加載的MVC3異步控制器

如果它可能的話,是有道理的。 謝謝。

回答

6

不要被愚蠢地認爲通過使控制器異步,你會提高性能。在大多數情況下,你會讓事情變得更糟。 Async控制器可以提高性能的唯一場景是利用IO /完成端口。當您執行IO密集型操作(如數據庫或Web服務調用)時,可能會發生這種情況。只有使用異步版本的ADO.NET BeginXXX和EndXXX,您才能從異步控制器中受益。

如果您只是創建一個異步控制器,並在其中調用DataContext上的同步操作,您將失去所有好處,甚至會使事情變得更糟。

另一個可以使用異步控制器來提高性能的有用場景是當你想並行化多個操作時。只有當您正在執行的工作可以並行時,才能使用此功能。

我建議你看看MSDN上的following article。它是關於異步ASP.NET頁面的,但在MVC(頁面是控制器)中的概念完全相同。在封面之下,異步控制器使用相同的機制來實現。因此,在深入瞭解異步編程之前,確保您已經非常瞭解IO /完成端口的概念。

另一個建議:不要做任何過早的優化。首先通過加載測試你的應用程序,並且只有當你發現你的同步數據庫調用實際上是一個瓶頸時,你應該看看異步控制器。

+0

這個想法是並行化從多個數據庫表(映射在EF中)(約10),可以並行完成的數據加載。 – Maxim

+0

好的,在這種情況下,你確實可以從異步控制器中受益。這個想法是,你會在每個數據庫調用中使用控制器動作中的任務。就數據庫調用而言,它將是同步的,並且與沒有使用異步控制器的情況完全相同。 –