Назад
Создание прибыльного бизнеспроекта на базе сайта

SEO + ASP.NET 4.0 + БИЗНЕСМОДЕЛЬ = ПРИБЫЛЬНЫЙ САЙТ

Инструмент быстрого построения прибыльного онлайн бизнеса своими силами без капиталовложений за 4 месяца все подробности на SEO + ASP.NET 4.0.

Подписка на рассылку

МАГИЯ C#!

Создание вебсайта с формой автоматического приема онлайн платежей по WebMoney!
Ваше имя
Ваш e-mail
Уроки по ASP.NET c# ADO.NET
     

18 видеоуроков
более 5 часов
по созданию сайта,
выполняющего
продажи ваших продуктов (физических/электронных) на полном автомате с личным оповещением на e-mail, а также ...
DVD-курс по C#, .NET

3 часть. Введение в ASP.NET. WebServices Профессиональная подготовка разработчика по языку C# на платформе .NET

asp.net webservices dvd c# gridview Гудок курс Более 65 подробных видео уроков по теоретическим основам технологии сайтостроения ASP.NET и процессу создания и использованию вебсервисов.

DVD-курс по C#, .NET

2А часть. XML/TXT в аспекте ADO.NET Профессиональная подготовка разработчика по языку C# на платформе .NET

xml txt dvd c# ADO ADO.NET Гудок курс 70 подробных видео уроков по работе с форматами xml, txt, по работе с файлами и директориями. Разработка высокоорганизованных свойств для значительного сокращения объема исходного кода и облегчения дальнейшей модификации и многое-многое другое...

DVD-курс по C#, .NET

1 часть. Windows Forms Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок

185 подробнейших уроков (70 часов) лекций в формате видеоуроков по теории языка c# и платформы .NET. Практическое закрепление теоретического материала на примере создания Windows Forms - приложения видеоигры "Tanks"

DVD-курс по C#, .NET

2 часть. ADO.NET/SQL Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок ADO.NET sql

165 подробных видео уроков по созданию приложений распределенных баз данных на примере разработки проектов с использований технологий ADO.NET (Connected model, Disconnected model, Typed DataSet, ...)

Бодибилдинг
Программы тренировок для занятий штангой, гантелями; описание тренажеров

Я записываю курсы!
  Курс валют

НБУ курс евро






Метод Dispose() и конструкция using()



Попробуем кинуть тень на использование метода Object.Finalize() и рассмотрим более детерминированную конструкцию освобождения ресурсов – метод Dispose(). Вспомним, что перекрытие метода Finalise() не гарантирует моментальное удаление объекта из памяти. Данной инструкцией мы как бы указываем сборщику мусора быть повнимательнее к объекту и при первой же возможности утилизировать его. И достаточно часто ожидание удаления объекта из памяти нас не устраивает и хотелось бы иметь инструмент непосредственного освобождения ресурсов в момент, когда мы этого захотим. Этим инструментом является метод Dispose(). Данный метод задекларирован в интерфейсе IDisposable, кстати, данный интерфейс определяет лишь этот единственный метод:

public interface IDisposable
{
	Dispose();
}

Если мы для требуемого объекта реализуем интерфейс IDisposable, то сможем выполнять необходимую очистку неуправляемых ресурсов без попадания в очередь финализации и не ждать пока сборщик мусора вызовет метод Finalize() для данного обекта. Более того, структуры также могут реализовывать данный интерфейс. Соответственно синтаксис реализации интерфейса IDisposable достаточно прост:

class MyClass: IDisposable
{
	public void Dispose()
    {
		//очищаем неуправляемые ресурсы
    }
}

Попользовавшись объектом, следует поскорее освободить неуправляемые ресурсы которые использовал в своей работе данный объект. Заметьте, что желательно проверять факт реализации данным объектом интерфейса IDisposable:

class Program
{
	static void Main()
    {
		MyClass myClass = new MyClass();
		//начинаем работать с объектом myClass
		//работаем с объектом myClass
		//закончили работать с объектом myClass
		if(myClass is IDisposable)
			myClass.Dispose();
    }
}

Данная проверка на реализацию объектом интерфейса IDispose является универсальной. Это значит, что даже если вы используете модуль стороннего разработчика (программиста) и не знаете, реализовывает ли данный тип интерфейс IDisposable, все равно всегда сможете безболезненно проверить это и в случае поддержки вызвать метод Dispose(). Это обстоятельство также означает то, что если разработчик класса (типа) реализовал в нем (классе) интерфейс IDisposable, то однозначно по завершению работы с объектом данного класса следует зачищать неуправляемые ресурсы путем вызова метода Dispose().

Есть небольшой нюанс. В данном случае мы все таки не можем быть уверенными в том, что инструкция myClass.Dispose(); будет выполнена, поскольку есть риск где то выше в коде получить необработанное исключение. В виду этого обстоятельства желательно предусматривать блоки try/catch для «рискованного» кода, а вызов метода Dispose() помещать в блок catch. Это гарантирует вызов метода Dispose() в любом случае не зависимо от того, вылетело, или нет исключение. Существует более простая и понятная форма по работе с методом Dispose().

class Program
    {
        static void Main()
        {
            using (MyClass myClass = new MyClass())
            {
                //начинаем работать с объектом myClass
                //работаем с объектом myClass
                //закончили работать с объектом myClass

                //if(myClass is IDisposable)
                //   myClass.Dispose();
            }
        }
    }

Однако здесь следует четко знать, поддерживает ли класс MyClass метод Dispose(). Если нет, то мы получим исключение. Используя конструкцию using, мы освобождаем себя от необходимости вызывать метод Dispose() по завершению работы с объектом. Так, при выходе из тела блока using CLR сама вызовет данный метод, причем даже в том случае, когда возникнет исключение! Вот еще пример из MSDN

using (System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\Users\Public\Documents\test.txt"))
{
    string s = null;
    while((s = sr.ReadLine()) != null)
    {
        Console.WriteLine(s);
    }
}

Ну и на последок простимулирую дополнительно вас пользоваться оператором using, сказав, что оператор using гарантирует вызов метода Dispose(), даже если при вызове методов в объекте возникнет исключение.



Больше информации читайте по теме:



Оценить статью:

Оценивая статью, Вы подсказываете нам насколько данная информация стала полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала для понимания и простоты его изложения. Дополнительные комментари, вопросы, дополнения и замечания Вы можете указать на странице От Вас

Частичное, или полное копирование материала данной статьи возможно лишь при размещении ссылки на данную страницу.


            
        




Имя:  


Текст комментариев (не больше 600 знаков):  
введите не более 600 знаков



Введите символы с картинки:
Капча имеет "срок годности". Поэтому, если необходимо обновите страницу.



Черный список покупателей
c# курс Гудок   курс по ASP.NET Гудок   курс по ADO.NET Гудок   курс по XML txt Гудок   курс по рефлексии и многопоточности Гудок