当您创建 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
对此只有两种解决方法。
- Velocity 团队修复了这个错误(我相信他们会的)
- 您需要在应用程序中的静态方法上使用相同的 cachefactory 对象,并在每次要使用缓存时引用它。(这可行,但在我看来不是最佳的。)
我还有一个缓存范围,可用于包装您的缓存方法,并将很快将其发布在 codeplex 上。您可以将它包装在您的缓存方法中,就像事务范围一样,它将为您管理锁定和连接。