Pergunta

Quando você cria uma instância do CacheFactory e, em seguida, não usá-lo mais a memória que foi usado durante a criação do objeto não é liberado. Isto terá um efeito substancial sobre todos os aplicativos web ou cenários onde um cachfactory pode ser criadas várias vezes. Os sintomas desta será o uso invulgarmente elevado de memória um processo e no IIS isso provavelmente resultará em seu aplicativo ter que reciclar mais frequentemente, uma vez que com a superação a sua memória alocada mais rapidamente.

O código a seguir irá mostrar um aumento de cerca de 500MB sim eu MegaBytes médios de utilização de memória!

Para duplicar colocar o seguinte código em seu aplicativo:

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

Existem apenas duas soluções alternativas para isso.

  1. correções equipe Velocity o bug (e tenho certeza que eles vão)
  2. Você precisa usar o mesmo objeto CacheFactory em um método estático em seu aplicativo e referenciá-lo cada vez que você quiser usar o cache. (Isso funciona, mas não é o ideal, na minha opinião.)

Eu também tenho um cachingscope que pode ser usado para embrulhar os seus métodos de armazenamento em cache e irá postar isso em codeplex breve. Você pode envolvê-lo em torno de seus métodos de armazenamento em cache como um escopo de transação e vai gerir o bloqueio e conexão para você.

Foi útil?

Solução 2

Eu tenho construir um provedor de espaço para resolver esse problema. Você pode obter o código aqui.

http://www.codeplex.com/CacheScope

Outras dicas

Então, onde é a pergunta? Você deve arquivar o bug, e não postar isso aqui, como a equipe Velocity é mais do que provável monitoramento Microsoft Connect para bugs.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top