Domanda

Quando crei un'istanza della cachefactory e poi non la usi più, la memoria utilizzata durante la creazione dell'oggetto non viene rilasciata. Ciò avrà un effetto sostanziale su tutte le app o scenari Web in cui una cache potrebbe essere creata più volte. I sintomi di questo saranno una memoria insolitamente alta che usa un processo e in IIS molto probabilmente ciò porterà la tua app a dover riciclare più spesso poiché con il sovraccarico della sua memoria allocata più rapidamente.

Il seguente codice mostrerà un aumento di circa 500 MB sì, intendo MegaByte di utilizzo della memoria!

Per duplicare inserisci il seguente codice nella tua app:

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

Esistono solo due soluzioni alternative per questo.

  1. Il team Velocity corregge il bug (e sono sicuro che lo farà)
  2. È necessario utilizzare lo stesso oggetto cachefactory su un metodo statico nella propria app e fare riferimento a esso ogni volta che si desidera utilizzare la cache. (questo funziona ma non è ottimale secondo me.)

Ho anche un cachingscope che può essere usato per avvolgere i tuoi metodi di cache e pubblicherò presto questo su codeplex. Puoi avvolgerlo attorno ai tuoi metodi di cache proprio come un ambito di transazione e gestirà il blocco e la connessione per te.

È stato utile?

Soluzione 2

Ho creato un provider di ambito per risolvere questo problema. Puoi ottenere il codice qui.

http://www.codeplex.com/CacheScope

Altri suggerimenti

Quindi dov'è la domanda? Dovresti presentare il bug e non pubblicarlo qui, poiché il team Velocity sta probabilmente monitorando la presenza di bug in Microsoft Connect.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top