2011-06-07 77 views
3

我创建了一个ASP.NET的MVC 3应用程序,允许用户通过各种各样的基于文件名的媒体文件进行搜索。有大量的这些文件,所以我创建了一个倒排索引,我将它存储在内存中。具体来说,我的故事作为一个坚持静态数据通过应用程序池回收

Dictionary<string,List<string>>. 

好了,这个指标首先必须以可搜索的创建,所以我创建了一个方法来构建它。它工作正常,一切都很好,但每当AppPool刷新时,我的索引就会丢失。我尝试关闭AppPool回收,但我认为这是一个坏主意(它似乎无论如何回收)。

我基本上不知道我的下一步行动应该是什么。有没有办法检测AppPool何时刷新并重建我的索引?或者完全禁用应用程序池回收是安全的吗?

干杯, -Josh

回答

2

假设指数是提供给它,我还以为你能在连载的Application_disposed指数和全球ASAX Application_Start事件,然后去连载呢?

0

如果你需要一个持久的键/值存储,我建议像Redis。我在使用该产品的极高容量环境(每小时超过5亿次交易)中取得了巨大成功。

3

小李的答案是接近,我认为,但并不完美。问题是应用程序启动事件只在服务器自身启动时触发一次;每次应用程序池回收时都不会触发。我试图做到这一点确切的事情,以便在池回收之前将一些数据序列化到磁盘,并在之后将其读回(在将它存储在数据库中的leiu中)。我发现应用程序启动事件从未在池回收后触发,所以我的数据永远不会被读回。我无法找到在应用程序池回收后触发的事件,因此我不得不将数据读回到将持有此数据的对象的构造函数中。它可以工作,但会让数据放在磁盘上比我感到舒适。

这不是在我看来(即使你加密了和我一样的数据)的理想解决方案,但工程没有-的少。希望这可以帮助其他人寻找一个类似的解决方案,或者也许有人可以在这个跌跌指出应用程序池回收后,它实际火灾的事件。我当然有兴趣了解这一点。

相关问题