C# 如何控制ASP.net应用程序中的资源计数?

C# 如何控制ASP.net应用程序中的资源计数?,c#,asp.net,C#,Asp.net,我正在开发一个ASP.net应用程序,它基本上使用巨大的excel文档进行一些计算,最后将输出从excel提取到页面。正常的excel文档大小可能超过15 MB。因此,我不得不对应用程序设置一个限制,即它在一个时间点只能为5个用户提供服务(以控制内存使用,从而使在同一服务器上运行的其他web应用程序不会受到影响)。因此,所有其他用户都必须排队等待服务。用于计算的Excel缓存在服务器中,当出现新请求时,应用程序将克隆缓存的Excel并将其用于计算。 计算完成后,将处理使用的excel。(我不能重

我正在开发一个ASP.net应用程序,它基本上使用巨大的excel文档进行一些计算,最后将输出从excel提取到页面。正常的excel文档大小可能超过15 MB。因此,我不得不对应用程序设置一个限制,即它在一个时间点只能为5个用户提供服务(以控制内存使用,从而使在同一服务器上运行的其他web应用程序不会受到影响)。因此,所有其他用户都必须排队等待服务。用于计算的Excel缓存在服务器中,当出现新请求时,应用程序将克隆缓存的Excel并将其用于计算。 计算完成后,将处理使用的excel。(我不能重复使用用于他人计算的excel)


所以我的问题是“我们如何限制excel的使用?”。这个限制应该是应用程序范围的(而不是会话范围的)。

如果我试图限制对资源的访问,那么我通常实现对象池模式。这是一个很好的参考。

您可以创建一个应用程序级共享变量(使用静态变量或使用),以保持正在进行的计算计数。在修改共享状态时不要忘记锁定——我个人更喜欢使用静态变量和提供线程安全性的方法


另一方面,我实际上会以不同的方式设计解决方案。由于基于excel的计算占用大量资源,我将在不同的过程中移动该部分(可能是windows服务)。在此过程中,可能会托管WCF以接受计算请求(注意,请求提交可以通过多种方式完成—将请求文件放入某个文件夹或将行插入数据库表等)。任何类型的节流都会进入这个过程。ASP.NET应用程序将向此服务传递请求,并异步更新用户的结果。

谢谢,因为我创建的资源不可重用,是否值得使用对象池模式?谢谢,现在我使用了完全相同的模式,但希望听到有没有更好的方法。@KBBWrite,如编辑中所标记,我会将计算任务外包给不同的流程/服务。主要的优点是web应用程序不受影响,任务服务(计算部分)可以独立扩展(比如在多台服务器上运行)。是的,这是一种完美的方式。但客户端并不真正愿意在服务器上托管Windows服务,除非在压力测试中无法真正满足请求的周转时间。因此,我正在进行一项研发工作,首先使用ASP.net对其进行测试。为了进行性能比较,我也在使用WCF Windows服务方法。@KBBWrite,您可以在web应用程序或WAS(如果可用)中托管WCF服务-只要确保服务于此web应用程序的应用程序池不同即可。虽然这不是最好的托管方案,但您可以解决您的问题。