为了提高MVC3应用程序的性能,我们希望将一些Controller标记为AsyncController。 我们使用EF 4.x(最新的稳定版),需要一些建议,链接如何以适当的方式对EF进行异步调用。如何处置实体等
如果它可能,并且有意义。 感谢。
答案 0 :(得分:6)
不要误以为通过使控制器Async可以提高性能。在大多数情况下,你会让事情变得更糟。 Async控制器可以提高性能的唯一方案是利用IO /完成端口。当您进行IO密集型操作(如数据库或Web服务调用)时,可能会发生这种情况。只有使用ADO.NET BeginXXX和EndXXX的异步版本,您才能从异步控制器中受益。
如果您只是创建一个异步控制器,并在其中调用DataContext上的同步操作,则会失去所有好处甚至使事情变得更糟。
可以使用异步控制器来提高性能的另一个有用方案是,您希望并行化多个操作。只有在您正在执行的工作可以并行化时,才能使用此功能。
我建议您查看MSDN上的following article。它是关于异步ASP.NET页面,但MVC中的概念完全相同(页面是控制器)。在幕后,异步控制器使用相同的机制实现。因此,在进入异步编程之前,请确保您已经很好地理解了IO /完成端口的概念。
另一个建议:不要做任何过早的优化。首先对应用程序进行负载测试,但只有当您发现同步数据库调用实际上是瓶颈时,才应该看看异步控制器。