当您创建cachefactory的实例,然后不再使用它时,不会释放在创建对象期间使用的内存。这将对所有可能多次创建cachfactory的Web应用程序或场景产生重大影响。这种情况的症状将是异常高的内存使用过程,在IIS中,这很可能会导致您的应用程序不得不更频繁地回收,因为它会更快地超出其分配的内存。

以下代码将显示增加约500MB是的我的意思是MegaBytes的内存使用量!

要复制,请将以下代码放入您的应用中:

Dim CacheFactory1 As CacheFactory = New CacheFactory()
For i As Int32 = 1 To 1 * (10 ^ 4)
    CacheFactory1 = New CacheFactory()
    CacheFactory1 = Nothing
Next

这只有两种解决方法。

  1. Velocity团队修复了这个bug(我相信他们会这样做)
  2. 您需要在应用程序中的静态方法上使用相同的cachefactory对象,并在每次要使用缓存时引用它。 (这种方法有效,但在我看来并不是最优的。)
  3. 我还有一个可以用来包装你的缓存方法的cachingscope,并会很快在codeplex上发布。您可以像处理事务范围一样将其包装在缓存方法中,它将为您管理锁定和连接。

有帮助吗?

解决方案 2

我已经构建了一个解决此问题的范围提供程序。你可以在这里获得代码。

http://www.codeplex.com/CacheScope

其他提示

问题在哪里?你应该提交bug,而不是在这里发布,因为Velocity团队很可能会监视Microsoft Connect的bug。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top