asp.net-mvc-3 - 用于从 Entity Framework 异步加载的 MVC3 异步 Controller

标签 asp.net-mvc-3 asynchronous entity-framework-4.1 asynccontroller

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

如果可能并且有意义的话。 谢谢。

最佳答案

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

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

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

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

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

关于asp.net-mvc-3 - 用于从 Entity Framework 异步加载的 MVC3 异步 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10998359/

相关文章:

javascript - 如何将 ViewModel 属性传递给 ajax post 方法?

c# - MVC3 cookie 滑动过期不起作用

c# - 使用 ASP.NET MVC 3 连续刷新局部 View

javascript - 尝试通过 google Geolocation API 转换经度纬度,但没有成功

c# - 是否有可能通过 RIA 服务获得类似 0..1 数据的关联?

c# - Entity Framework 代码优先与 T4 模板

entity-framework - 如何判断实体集合中的关系是否已经保存到数据库中

c# - 如何从json解析日期时间?

javascript - 轮询直到得到具体结果?

Scala:将文件读取为无限/异步行流