C# 将数据异步插入数据库有什么好处?

C# 将数据异步插入数据库有什么好处?,c#,.net,database,asynchronous,C#,.net,Database,Asynchronous,我正在学习一个名为pet shop的经典应用程序,它使用.net技术。为了处理订单数据,该应用程序的作者提供了两种解决方案。一种是同步将订单数据插入数据库,另一种是异步,将订单数据放入消息队列MSMQ技术,然后使用线程接收订单数据,最后将数据插入数据库。第一种解决方案非常简单,另一种解决方案并不简单,我想知道当采用异步模式时,会给应用程序带来什么好处?性能还是其他方面?许多普通程序做两件事: 在图形用户界面中与用户交互 在数据库中读写数据。 数据库通常位于远程服务器上,往返时间明显超过200-5

我正在学习一个名为pet shop的经典应用程序,它使用.net技术。为了处理订单数据,该应用程序的作者提供了两种解决方案。一种是同步将订单数据插入数据库,另一种是异步,将订单数据放入消息队列MSMQ技术,然后使用线程接收订单数据,最后将数据插入数据库。第一种解决方案非常简单,另一种解决方案并不简单,我想知道当采用异步模式时,会给应用程序带来什么好处?性能还是其他方面?

许多普通程序做两件事:

在图形用户界面中与用户交互 在数据库中读写数据。 数据库通常位于远程服务器上,往返时间明显超过200-500毫秒

因此,这种程序的一个重要目标是,即使数据库访问处于活动状态,也要保持GUI的响应性。这是通过异步数据库访问实现的


请注意:虽然MSMQ和多线程的示例对学习很有帮助,但现在使用更简单的async/await机制也可以做一些非常类似的事情。

async用于同时完成多个任务

在基本服务或可能的控制台应用程序中,您可能需要执行数据库、文件或网络操作,通常情况下,您的代码在继续之前必须等待结果。这是一个明确的同步程序,异步不会改善任何东西,可能会以性能为代价增加复杂性

另一方面,如果您可以在等待新请求完成的同时处理其他内容(可能是以前的请求结果),那么您可以在发出请求的停机时间内让cpu工作

在处理UI时,这比第一次出现更常见。大多数本机UI技术将在负责重新绘制UI的线程上运行代码。这意味着一个按钮,当点击该按钮时,将数据从数据库同步加载到应用程序中,将阻止用于重新绘制UI的线程。你可能会在写得不好的软件中看到这一点,staya按下了按钮

另一种模式是并行编程。在引擎盖下,许多线程通常使用不同的数据执行相同的逻辑。这可以极大地提高数据集的处理速度,但与您最初的问题有点脱节


一般来说,如果它使用文件、数据库或网络等外部资源,或者如果您只是希望执行时间很明显,使其异步。

我理解你的意思,但我有另一个问题,为什么要使用MSMQ缓存数据?我只需创建一个新线程,在没有MSMQ的情况下将数据插入数据库,这样ui就不会被阻塞。如果有两个线程,您必须在不阻塞第一个线程的情况下将数据从一个线程传输到另一个线程,所以一个带锁的共享区域是不行的。将数据从一个线程传输到另一个线程?为什么我需要这样做?例如,如果我需要插入两个命令,那么我可以创建两个线程来完成任务,所有线程需要做的就是这样的操作顺序。addOrderInfo。这两个线程没有关系。没有传输在它们之间,对吗?在从另一个线程访问订单之前,必须锁定它。这将锁定UI线程。