我有六个SQL UPDATE语句(在同一个数据库中)作为我每晚运行的SQL代理作业,以确保两个系统彼此同步。每次更新大约需要10分钟才能运行。
今天作为测试,我打开了SQL Studio Manager并打开了五个窗口并同时运行了五个更新(我可以保证一行只能通过一个SQL语句更新)。五个查询在15分钟内完成。
因此,我不是使用单个SQL代理作业而是考虑从VB.NET程序调用SQL语句,因此我可以:
1)使用异步调用来确保查询同时运行。 2)使用多个线程来确保查询同时运行
我最近读了一篇文章说不应该使用异步调用来加快处理性能。因此我相信多线程就是答案。这是对的吗?
答案 0 :(得分:2)
我最近读了一篇文章说不应该使用异步调用来加快处理性能。因此我相信多线程就是答案。这是对的吗?
我认为你读的是错的,或者你误解了它。并发运行不会加快速度,但通过释放线程可以让更多事情并行发生(在Windows线程上创建起来很昂贵:应该避免在短时间内创建和销毁它们。)
并发(例如,使用.NET 4.5.1的异步支持)允许活动(包括启动其他异步操作)在线程用于其他内容时继续。
如何执行此操作的详细信息取决于您访问数据库的方式:实体框架(EF),ADO.NET或其他内容?
使用EF,您可以使用QueryableExtensions
中的扩展方法,例如ToListAsync
查询。
使用ADO.NET,您可以使用ExecuteNonQueryAsync
和ExecuteReaderAsync
等SqlCommand
方法。
答案 1 :(得分:1)
由于您正在处理sql语句,因此您在vb.net中所做的选择不会影响在sql上完成5个任务所需的性能或时间。
如果您拨打5个异步电话,那么您将等待5个答案;如果你产生5个线程,这些线程将等待同步调用完成。最终结果将是相同的。
我也在推动5个代理工作:是一个利用现有sql工具的解决方案,不需要额外的编码(更多编码=更多维护),并且在几乎任何sql实例上都是开箱即用的