ASP.Net MVC5 проверяет, находится ли класс в памяти - PullRequest
0 голосов
/ 27 февраля 2019

Для интранет-приложения я создаю веб-сайт MVC5.Мне нужен очень большой объект класса с большим количеством данных в моей модели и по соображениям безопасности класс, который будет создаваться при каждом вызове метода, т.е.

largeClass = new LargeClassObject(param1, param2);

В конце функции работает garbageCollectorраспоряжаться классом.Это отлично работает.Иногда, может быть, когда внутренняя сеть разрывается, возможно, что метод некорректно завершается, и класс остается в памяти.Как я могу определить при следующем вызове, существует ли предыдущая копия этого класса?

1 Ответ

0 голосов
/ 27 февраля 2019

Наследуйте свой класс от IDisposable:

public class LargeClassObject : IDisposable
{
   var disposed = false;
   var handle = new SafeFileHandle(IntPtr.Zero, true);

   public void Dispose()
   { 
      Dispose(true);
      GC.SuppressFinalize(this);           
   }

   protected virtual void Dispose(bool disposing)
   {
      if (disposed)
         return; 

      if (disposing) {
         handle.Dispose();
      }

      disposed = true;
   }
}

Тогда просто сделайте это:

public void Main()
{
    using(var largeClass = new LargeClassObject(param1, param2))
    {
        try
        {
            DoSomethingWithObject(largeClass);
        }
        catch(Exception ex)
        {
            //Do any additional cleanup
        }
    }
}

Теперь, будет ли это работать для вас, зависит от ваших конкретных требований, но largeClass будетудаляется из памяти при возникновении ошибки во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...