ASP.NET异步方法问题

时间:2009-04-23 13:48:54

标签: asp.net database asynchronous

我最近有一位开发人员告诉我,你应该始终异步进行数据库调用。 (使用ThreadPool.QueueUserWorkItem或IAsyncResult和委托)

他的理由是:IIS只有24个(左右)线程可用于请求。当用户发出请求时,他们会获得其中一个线程。但是,使用异步方法时,可以访问IIS范围之外的Windows线程。他说,当你以这种方式使用异步方法时,你将初始线程释放给其他用户的请求,并将其转移到Windows线程(对于该线程的生命周期)。

你怎么看?所有db调用都应该是异步的吗?

3 个答案:

答案 0 :(得分:2)

你有理由相信你会遇到这样的瓶颈吗?这种编程风格很难你有充分的理由采取这种方法。

默认情况下,限制是20个工作线程,但请记住这是每个CPU核心限制。如果这个限制成为一个问题,因为ASP.NET变得空闲等待数据库查询完成,为什么不只是增加一点线程限制(我实际上并没有建议你这样做,因为我实际上并不认为这是必要的)。

答案 1 :(得分:2)

工作线程数量有限。这些与ASP.NET有关,而不是IIS(IIS7除外,它们是相同的东西)。确实,数据库调用或任何其他调用都会占用其中一个线程。对于ADO.NET调用,可以将页面编写为异步页面,在数据库操作正在进行时不使用任何线程。

除非你确实遇到问题,否则你不应该为此烦恼。

答案 2 :(得分:0)

如果您的网站如此成功,以至于最终缺乏服务请求的线程,那么购买另一个网络服务器会更便宜,更简单,更容易出错。

您可能会提醒此开发人员,线程切换不是免费操作,而某些实例可能需要比db调用更长的时间。