Вопрос

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

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

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

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

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

<Ол>
  • Команда Velocity исправляет ошибку (и я уверен, что они это сделают)
  • Вам нужно использовать один и тот же объект cachefactory в статическом методе в вашем приложении и ссылаться на него каждый раз, когда вы хотите использовать кеш. (это работает, но, на мой взгляд, не оптимально.)
  • У меня также есть кешингоскоп, с помощью которого можно обернуть ваши методы кеширования, и я скоро опубликую его в codeplex. Вы можете обернуть его вокруг ваших методов кэширования точно так же, как область транзакции, и он будет управлять блокировкой и соединением для вас.

    Это было полезно?

    Решение 2

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

    http://www.codeplex.com/CacheScope

    Другие советы

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top