Pregunta

Cuando crea una instancia de la fábrica de caché y luego ya no la usa, la memoria que se usó durante la creación del objeto no se libera. Esto tendrá un efecto sustancial en todas las aplicaciones web o escenarios en los que se podría crear un cachfactory varias veces. Los síntomas de esto serán una memoria inusualmente alta usando uno de los procesos y en IIS esto probablemente hará que su aplicación tenga que reciclarse con más frecuencia, ya que se desbordará su memoria asignada más rápidamente.

¡El siguiente código mostrará un aumento de aproximadamente 500 MB, sí, me refiero a Megabytes de uso de memoria!

Para duplicar, ingrese el siguiente código en su aplicación:

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

Solo hay dos soluciones para esto.

  1. El equipo de Velocity corrige el error (y estoy seguro de que lo hará)
  2. Debe usar el mismo objeto cachefactory en un método estático en su aplicación y hacer referencia a él cada vez que quiera usar el caché. (esto funciona pero no es óptimo en mi opinión).

También tengo un cachingscope que se puede usar para envolver sus métodos de almacenamiento en caché y lo publicaré en codeplex pronto. Puede ajustarlo a sus métodos de almacenamiento en caché al igual que un alcance de transacción y administrará el bloqueo y la conexión por usted.

¿Fue útil?

Solución 2

He creado un proveedor de alcance para resolver este problema. Puede obtener el código aquí.

http://www.codeplex.com/CacheScope

Otros consejos

Entonces, ¿dónde está la pregunta? Debería archivar el error y no publicarlo aquí, ya que es muy probable que el equipo de Velocity esté monitoreando Microsoft Connect en busca de errores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top