Question

Lorsque vous créez une instance de la cachefactory et que vous ne l'utilisez plus, la mémoire utilisée lors de la création de l'objet n'est pas libérée. Cela aura un effet substantiel sur toutes les applications Web ou les scénarios dans lesquels une cachfactory pourrait être créée plusieurs fois. Les symptômes de cette situation seront une utilisation inhabituellement importante de la mémoire dans le processus. Dans IIS, votre application devra probablement recycler plus souvent, car elle surchargera plus rapidement la mémoire qui lui est allouée.

Le code suivant indique une augmentation d’environ 500 Mo. Oui, je parle de mégaoctets d’utilisation de la mémoire!

Pour dupliquer, insérez le code suivant dans votre application:

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

Il n'y a que deux solutions de contournement pour cela.

  1. L'équipe Velocity corrige le bogue (et je suis sûr qu'ils le feront)
  2. Vous devez utiliser le même objet cachefactory sur une méthode statique dans votre application et le référencer à chaque fois que vous souhaitez utiliser le cache. (Cela fonctionne mais n’est pas optimal à mon avis.)

J'ai également un cachingscope qui peut être utilisé pour envelopper vos méthodes de cache et le posterai bientôt sur codeplex. Vous pouvez envelopper vos méthodes de mise en cache comme une étendue de transaction et gérer le verrouillage et la connexion pour vous.

Était-ce utile?

La solution 2

J'ai créé un fournisseur d'étendue pour résoudre ce problème. Vous pouvez obtenir le code ici.

http://www.codeplex.com/CacheScope

Autres conseils

Alors, où est la question? Vous devriez enregistrer le bogue, et ne pas le poster ici, car l'équipe Velocity surveillera probablement Microsoft Connect à la recherche de bogues.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top