Velocity CTP2 Серьезная ошибка памяти - PullRequest
0 голосов
/ 11 января 2009

Когда вы создаете экземпляр кеш-фабрики, а затем больше не используете его, память, которая использовалась при создании объекта, не освобождается. Это окажет существенное влияние на все веб-приложения или сценарии, в которых кэша может создаваться несколько раз. Симптомами этого будет необычно высокое использование памяти одним процессом, и в IIS это, скорее всего, приведет к тому, что вашему приложению придется чаще перезагружать память, поскольку оно быстрее загружает выделенную память.

Следующий код покажет увеличение примерно на 500 МБ, да, я имею в виду использование мегабайтов памяти!

Для дублирования вставьте следующий код в ваше приложение:

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

Для этого есть только два обходных пути.

  1. Команда Velocity исправляет ошибку (и я уверен, что они исправят)
  2. Вам необходимо использовать один и тот же объект cachefactory в статическом методе в вашем приложении и ссылаться на него каждый раз, когда вы хотите использовать кеш. (это работает, но, на мой взгляд, не оптимально.)

У меня также есть кешингоскоп, с помощью которого можно обернуть ваши методы кеширования, и я скоро опубликую его в codeplex. Вы можете обернуть его вокруг ваших методов кэширования точно так же, как область транзакции, и он будет управлять блокировкой и соединением для вас.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2009

Я создал провайдера для решения этой проблемы. Вы можете получить код здесь.

http://www.codeplex.com/CacheScope

0 голосов
/ 11 января 2009

Так в чем же вопрос? Вы должны сообщить об ошибке, а не публиковать ее здесь, поскольку команда Velocity, скорее всего, отслеживает ошибки в Microsoft Connect.

...