Iis 7 通过AppPool回收持久化静态数据

Iis 7 通过AppPool回收持久化静态数据,iis-7,windows-server-2008,application-pool,Iis 7,Windows Server 2008,Application Pool,我创建了一个ASP.NETMVC3应用程序,允许用户根据文件名搜索各种媒体文件。有很多这样的文件,所以我创建了一个倒排索引,存储在内存中。具体来说,我把它作为一个故事来讲述 Dictionary<string,List<string>>. 字典。 首先必须创建这个索引才能进行搜索,所以我创建了一个方法来构建它。它工作正常,一切都很好,但很自然,每次应用程序池刷新时,我的索引都会丢失。我曾尝试过关闭AppPool回收,但我认为这是个坏主意(不管怎样,它似乎都可以回收)

我创建了一个ASP.NETMVC3应用程序,允许用户根据文件名搜索各种媒体文件。有很多这样的文件,所以我创建了一个倒排索引,存储在内存中。具体来说,我把它作为一个故事来讲述

Dictionary<string,List<string>>. 
字典。
首先必须创建这个索引才能进行搜索,所以我创建了一个方法来构建它。它工作正常,一切都很好,但很自然,每次应用程序池刷新时,我的索引都会丢失。我曾尝试过关闭AppPool回收,但我认为这是个坏主意(不管怎样,它似乎都可以回收)

我基本上不确定下一步该怎么做。有没有办法检测AppPool何时刷新和重建我的索引?或者完全禁用应用程序池回收是否安全

干杯,
-Josh

如果您需要一个持久的键/值存储,我建议您使用类似这样的方法。我在非常大的交易量环境(一小时内超过5亿笔交易)中成功地使用了该产品。

假设该索引可用,我原以为您可以在应用程序上序列化索引,然后在全局asax的应用程序启动事件中取消序列化它。

我认为Mike的答案很接近,但并不完美。问题是,应用程序启动事件仅在服务器本身启动时触发一次;它不会在每次回收应用程序池时触发。我正试图在池回收之前将一些数据序列化到磁盘,然后再将其读回(在将其存储在数据库中的过程中)。我发现应用程序启动事件在池回收之后从未触发,因此我的数据从未读回。我找不到在应用程序池回收后触发的事件,因此我被迫将该数据读回保存该数据的对象的构造函数内部。它可以工作,但将数据留在磁盘上的时间比我熟悉的时间长

在我看来,这不是一个理想的解决方案(即使您像我一样加密数据),但仍然有效。希望这能帮助其他人寻找类似的解决方案,或者可能有人会偶然发现这一点,并指出在应用程序池回收后实际发生的事件。我当然有兴趣了解这件事