如何控制ASP.net应用程序中的资源计数
本文关键字:应用程序 资源 net ASP 何控制 控制 | 更新日期: 2023-09-27 18:14:42
我正在做一个ASP.net应用程序,它基本上使用巨大的excel文档做一些计算,最后从excel中提取输出到页面。正常的excel文档大小可能超过15 MB。所以我被迫在应用程序上设置一个限制,它应该在一个时间点只服务5个用户(为了控制内存使用,以便在同一服务器上运行的其他web应用程序不会受到影响)。因此,所有其他用户必须排队等待才能获得服务。用于计算的Excel缓存在服务器中,当有新的请求出现时,应用程序将克隆缓存的Excel并使用它进行计算。一旦计算完成,使用过的excel就会被处理掉。(我不能重复使用excel用于别人的计算)
所以我的问题是"我们如何限制excel的使用?"这个限制应该是应用程序范围的(而不是会话范围的)。
您可以创建一个应用程序级别的共享变量(使用静态变量或使用application State)来保持正在进行的计算计数。在修改共享状态时不要忘记锁——我个人更喜欢使用带有Interlocked方法的静态变量,以提供线程安全。
另一方面,我实际上会以不同的方式设计解决方案。因为基于excel的计算是资源繁重,我将移动的部分在不同的进程(可能是一个windows服务)。可能会在此过程中托管WCF以接受计算请求(注意请求提交可以通过多种方式完成-将请求文件放入某个文件夹或将行插入数据库表等)。任何形式的节流都会被放入这个过程中。ASP。. NET应用程序将请求传递给此服务,并异步更新用户有关结果的信息。
如果我试图限制对资源的访问,那么我通常实现对象池模式。这是一个很好的参考。