在ASP.NET MVC应用程序中,我正在执行xlsx
文件中的计算。我们在讨论计算中的18K变量(xlsx
文件大约是10MB),因此将它们加载到SpreadSheetGear
实例需要一段时间。因此,我需要在请求之间缓存SpreadSheetGear
对象,否则每个请求将永远需要。
现在我正在使用In-Proc应用程序缓存和会话缓存来保存请求之间的数据。在我的测试环境中,IIS的应用程序池比我们的会话超时(我认为默认的20分钟)更快地(有时只是几分钟)回收。池循环导致丢失所有In-Proc缓存数据,并且必须再次进行冗长的加载过程。
有没有人与SpreadSheetGear + ASP.NET MVC + IIS有相似的经历?
答案 0 :(得分:0)
当多个会话占用太多内存时,我遇到了类似的问题。一旦达到阈值,IIS终止随机会话以释放内存。解决方案是将缓存从CacheItemPriority.Default更改为CacheItemPriority.NotRemovable。这样IIS就不会从内存中移除会话,并且在超时时或者如果会话关闭,它将调用CacheItemRemovedCallback()并从内存中删除。
HttpRuntime.Cache.Insert(workbookPath, myWorkbook, Nothing, Cache.NoAbsoluteExpiration, New TimeSpan(0, 0, 1520), CacheItemPriority.NotRemovable, New CacheItemRemovedCallback(AddressOf OnRemoveCallBack))