Asp.net core MVC中是否应该始终使用异步控件进行数据访问
ERP+购物车ASP.NET MVC 4.8应用程序计划迁移到.NET 5 MVC核心应用程序。 计划使用具有NpgSql数据提供程序的实体框架核心 MVC4.8应用程序不使用任何异步方法 .NET 5中有用于数据访问的异步方法,如ToListSync()、ExecuteSqlInterpolatedAsync() 核心MVC控制器的示例返回异步任务,如Asp.net core MVC中是否应该始终使用异步控件进行数据访问,asp.net-core,.net-core,entity-framework-core,asp.net-core-mvc,npgsql,Asp.net Core,.net Core,Entity Framework Core,Asp.net Core Mvc,Npgsql,ERP+购物车ASP.NET MVC 4.8应用程序计划迁移到.NET 5 MVC核心应用程序。 计划使用具有NpgSql数据提供程序的实体框架核心 MVC4.8应用程序不使用任何异步方法 .NET 5中有用于数据访问的异步方法,如ToListSync()、ExecuteSqlInterpolatedAsync() 核心MVC控制器的示例返回异步任务,如 [HttpPost] public async Task<IActionResult> LogOn(LogOnMo
[HttpPost]
public async Task<IActionResult> LogOn(LogOnModel model, string returnUrl,
[FromServices] ShoppingCart shoppingcart
)
[HttpPost]
公共异步任务登录(LogOnModel模型、字符串返回URL、,
[FromServices]购物车购物车
)
将有100个人用户。
应用程序还具有通过http提供json数据的Web API。购物车部分允许搜索引擎扫描的任何访问
Ngpsql支持连接池,因此会自动添加多个连接。
应用程序托管在DebianLinuxVPS服务器上,使用Apache有4个核心
VSP有20GB的RAM,所以Linux缓存了大量数据。然而,大部分时间可能仍然被从Postgres数据库读取数据所消耗。
大多数控制器在数据库中读写数据
回答
建议始终使用异步方法进行数据访问
回答
建议不要总是使用异步
各国的结论
然而,异步操作并不是零成本的,而是编写异步代码
需要更多的关注和熟练,而且它也有自己的挑战
同一VPS服务器中的应用程序和数据库
回答
声明若应用程序和数据库位于同一服务器中,则不应使用async
回答
州
我想说,无论您在哪里进行I/O,都可以使用它
但后来:
如果你说的是ASP.NET MVC,它只有一个数据库后端,
那么,您(几乎可以肯定)将无法获得任何可伸缩性
从异步中获益。这是因为IIS可以处理更多的并发数据
SQL server(或其他经典RDBMS)的单个实例以外的请求
在我的情况下,有两种升级路径:
将所有内容更改为异步会在代码中引入新的错误吗?异步对于web应用程序不是强制性的。它主要只对GUI是强制性的 您的应用程序将继续工作。异步编程非常擅长处理大量请求。但你说你最多有100个用户。如果他们是100.000,你的申请将遭受很大的损失 我可以肯定地说,
async
编程确实带来了挑战,因为例如,如果处理不当,事务就会出现问题
当然,线程也有成本。异步的存在是为了避免每个线程所需的500KB开销。这意味着运行应用程序的机器可能需要垂直缩放。从这个意义上讲,异步可以节省RAM
选择权在你。既然你正在重构你的应用程序,你可以努力把它改进到下一步,为更大规模的应用做好准备
否则,对于100个用户,您的应用程序仍然可以正常工作
[编辑]一句话抵得上1000个字。在异步上下文中,应使用TransactionScopeAsyncFlowOption.Enabled
初始化事务,以避免描述的异常,并告知事务引擎线程正在参与异步流。为了简单起见,异步流共享同一个线程,因此应用程序代码(事务管理是C#code)不能依赖于线程本地信息,每次上下文切换到另一个异步流请求注意时,都必须清理上下文
结论:你的第一个评论是正确的。异步流大大减少了并发请求上的RAM利用率。谢谢。在VPS中,RAM受到限制并禁用交换以延长SSD磁盘寿命。因此,在我的例子中,当存在并发请求时,异步似乎可以节省RAM?在哪里可以阅读有关异步事务问题的信息?应该在事务中避免异步数据访问方法调用吗?我修改了我的答案,异步数据访问方法可以避免,也可以管理。