用于从Entity Framework进行异步加载的MVC3异步控制器

Max*_*xim 2 asynchronous asynccontroller entity-framework-4.1 asp.net-mvc-3

为了提高MVC3应用程序的性能,我们希望将一些Controller标记为AsyncController.我们使用EF 4.x(最新的稳定版),需要一些建议,链接如何以适当的方式对EF进行异步调用.如何处置实体等

如果它可能,并且有意义.谢谢.

Dar*_*rov 6

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

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

可以使用异步控制器来提高性能的另一个有用方案是,您希望并行化多个操作.仅当您正在执行的工作可以并行化时,才能使用此选项.

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

另一个建议是:不要做任何过早的优化.首先对应用程序进行负载测试,但只有当您发现同步数据库调用实际上是一个瓶颈时,您应该查看异步控制器.