0

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

下面的代码将显示增加了大约 500MB 是的,我的意思是兆字节的内存使用量!

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

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

对此只有两种解决方法。

  1. Velocity 团队修复了这个错误(我相信他们会的)
  2. 您需要在应用程序中的静态方法上使用相同的 cachefactory 对象,并在每次要使用缓存时引用它。(这可行,但在我看来不是最佳的。)

我还有一个缓存范围,可用于包装您的缓存方法,并将很快将其发​​布在 codeplex 上。您可以将它包装在您的缓存方法中,就像事务范围一样,它将为您管理锁定和连接。

4

2 回答 2

0

那么问题在哪里?您应该提交错误,而不是在此处发布,因为 Velocity 团队很可能会监控 Microsoft Connect 的错误。

于 2009-01-11T04:40:55.013 回答
0

我已经建立了一个范围提供程序来解决这个问题。您可以在此处获取代码。

http://www.codeplex.com/CacheScope

于 2009-02-16T19:50:07.293 回答