可以使用Castle Windsor在内存中保留静态引用吗?

问题描述:

背景... 我必须建立一个新的(asp.net mvc)应用程序,该应用程序使用现有的类库,该类库是复杂的,在此阶段无法重写。主要问题是这个类库有一个巨大的初始化命中 - 它需要长达10分钟才能将所有数据加载到内存中。这对于IIS启动后执行速度很快的生产环境来说很好。但是,对于开发而言,这是一场噩梦,因为每次构建解决方案并在浏览器中启动解决方案时,都需要很长时间。可以使用Castle Windsor在内存中保留静态引用吗?

可能的解决方案? 因此,这个想法是Castle Windsor或IOC生活方式可以用来保存这个内存,这样只有回收应用程序池才能强制重新加载。我记得在Windsor将代码保存在内存中之前有一个问题,所以即使在更改它并重新编译之后,IIS仍然运行旧代码 - 在这种情况下这是一个问题,但在我的新场景中,这正是我想要的。

任何人都知道如何做到这一点?我尝试过使用Singleton生活方式的虚拟项目,但在更改mvc项目后,它仍然重新加载类库。

+2

我不认为温莎会解决这个问题。重新编译(修改bin)将导致AppDomain无论如何重新加载。 – vcsjones 2011-06-02 14:18:26

+1

“我记得在Windsor将内存保存在内存中之前有一个问题,所以即使在更改并重新编译之后,IIS仍然会运行旧代码” - > Windsor无法做到这一点,您的问题就在其他地方。 – 2011-06-02 14:53:43

+1

即使在这个阶段看起来不像它,使用你的10分钟加载类库最终的成本也要比重写要多得多。 – 2011-06-03 12:13:40

也许你可以序列化加载的库的内容并将其保存在磁盘上的二进制形式。这可能会加速负载。这是一个疯狂的想法,但再一次,拥有一个需要10分钟才能加载的类库也是疯狂的。

如果数据没有序列化,那么您可以存储在缓存中,以便在重新编译时保持其状态。例如,memcached作为一个独立的进程运行。您可以更改bin或重新启动dev服务器进程,并且缓存将保持其状态。有一个访问codeplex访问memcacheD的提供者。