2

To improve performance of our MVC3 application we want to mark some Controller's to AsyncController. We use EF 4.x (latest stable), and need some advices, links how to make async calls to EF in a proper way. How to Dispose Entities etc.

If its possible at all and make sense. Thanks.

4

1 回答 1

6

不要误以为通过使控制器异步可以提高性能。在大多数情况下,你会让事情变得更糟。异步控制器可以提高性能的唯一情况是当您利用 IO/完成端口时。当您进行 IO 密集型操作(例如数据库或 Web 服务调用)时,可能会发生这种情况。只有使用 ADO.NET BeginXXX 和 EndXXX 的异步版本,您才能从异步控制器中受益。

如果您只是创建一个异步控制器并在其中调用 DataContext 上的同步操作,那么您将失去所有好处,甚至使事情变得更糟。

另一个可以使用异步控制器来提高性能的有用场景是当您想要并行化多个操作时。仅当您正在执行的工作可以并行化时,才可以使用它。

我建议你看看下面的文章。它是关于异步 ASP.NET 页面的,但概念在 MVC 中完全相同(其中页面是控制器)。在幕后,异步控制器是使用相同的机制实现的。因此,在深入了解异步编程之前,请确保您已经非常了解 IO/完成端口的概念。

另一个建议:不要做任何过早的优化。从负载测试你的应用程序开始,只有当你发现你的同步数据库调用实际上是一个瓶颈时,你才应该看看异步控制器。

于 2012-06-12T14:09:34.157 回答