используя в определении объекта в C # - PullRequest
2 голосов
/ 05 сентября 2010

когда мы используем для определения объекта? Например:

       using (Login objLogin = new Login())

Я знаю, что мы используем, когда мы хотим очистить память после использования этого объекта, но я не знаю, когда мы должны очистить память.

Ответы [ 3 ]

3 голосов
/ 05 сентября 2010

Оператор using должен использоваться для своевременного удаления объектов, которые реализуют IDisposable.Это на самом деле не очищает управляемую память, но позволяет управляемому объекту высвобождать любые неуправляемые ресурсы, которые он может содержать, и в некоторых случаях удаляет ссылки на управляемые объекты для предотвращения утечек памяти.

Я предлагаю прочитать на следующих сайтах, которые дают подробные объяснения как IDisposable, так и using заявления

1 голос
/ 05 сентября 2010

Всякий раз, когда объект является одноразовым (он реализует интерфейс IDisposable), это означает, что он, вероятно, использует некоторые неуправляемые ресурсы, которыми не может управлять сборщик мусора, и, следовательно, если ваш объект собирается, эти ресурсы могут остаться в памяти, вызывая некоторые проблемы. Решение этой проблемы:

1.Для реализации интерфейса IDisposable в таких объектах и ​​для очистки / закрытия неуправляемых ресурсов в методе Dispose (например, если вы используете одноразовый объект внутри объекта, было бы лучше иметь метод Dispose для вызова его распоряжаться внутри)

2. Для вызова метода Dispose для одноразовых объектов, когда они больше не нужны, но будьте осторожны, так как повторное использование удаленного объекта может вызвать некоторые исключения. Упомянутый вами синтаксис использования - это короткий способ сделать то же самое, и он интерпретирует это:

using(var obj=new myDisposableObject)
{
obj.Something();
}

в следующее:

 var obj=new myDisposableObject();
    try
    {
    obj.Something();
    }
    catch
    {
    throw;
    }
    finally
    {
    obj.Dispose();
    }

Таким образом, вы всегда можете быть уверены, что что бы ни случилось, метод Dispose вашего объекта всегда вызывается.

0 голосов
/ 05 сентября 2010

Вы не чистите память; объект, реализующий IDisposable, очистит свои неуправляемые ресурсы в своем методе Dispose (или, по крайней мере, это означает, что класс делает это путем реализации IDisposable), а .NET очистит память, когда объект будет собран.

...