Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Выпуск 6


Информационный Канал Subscribe.Ru

Профессинальное программирование на .NET


Выпуск 6

Здравствуйте, уважаемые подписчики!

Сайт рассылки - DeveloperGuru.NET. Не стесняйтесь задавать вопросы и писать отзывы на сайте или по email.

Как ловить блоги

Наверное, каждый слышал про блоги (blog). Их еще называют "сетевыми дневниками" или "живыми журналами" (ЖЖ). Я не собираюсь рассматривать ни историю их возникновения, ни причины огромной популярности. Поговорим о том, как блоги могут помочь программисту в его профессиональной деятельности. Дело в том, что многие разработчики, которым есть, что рассказать, завели свои блоги, из которых можно подчерпнуть очень много полезной информации и идей. К сожалению, среди полезной информации попадается много и бесполезной, но от этого никуда не деться. К тому же, абсолютно бесполезной информации практически не бывает. Например, один разработчик из Microsoft написал в своем блоге, что уезжает в медовый месяц на сказочный о.Бали и привел ссылку на сайт с фотографиями. К сожалению, мои доходы пока не позволяют наслаждаться подобным отпуском, зато сразу появился стимул стремиться к большему :-).
Начиная с этого выпуска, я буду давать ссылки на полезные заметки из блогов. Любой блог можно читать при помощи браузера, но при большом количестве просматриваемых блогов это может занять много времени, так как просмотреть пару десятков сайтов на предмет обновления очень непросто.
Поэтому был придуман альтернативный вариант - использование, так называемого, RSS reader. Это напоминает чтение NNTP новостей при помощи Outlook Express. На данный момент существует множество RSS ридеров, как платных, так и бесплатных. Один из самых удобных, на мой взгляд, RSS ридеров - RSS Bandit. Несмотря на бесплатность, по функциональности и удобству использования он превосходит многих платных конкурентов. К тому же, он полностью написан на C# и предоставляется с исходными кодами. При желании, вы можете добавить недостающие возможности или посмотреть, как реализована какая-то "фича", так необходимая вашей программе.

Почитать подробнее про блоги и RSS можно в журнале MSDN Magazine (по ссылке - на английском языке, но в печатном виде выходит русская версия).

Кроме того, рекомендую интересную статью про командную разработку на блоге Антона Смольянинова, регионального директора Microsoft: "Некоторые секреты командной разработки".

Кукушка, кукушка! Скажи, сколько мне лет жить осталось, или время жизни локальных переменных

Давайте рассмотрим такой фрагмент кода:

using System;

namespace GCNullTest
{
 class Class1
 {
  static void Main(string[] args)
  {
   Test t = new Test();
   Console.WriteLine("Test is created");

   GC.Collect();
   GC.WaitForPendingFinalizers();
   Console.WriteLine("After first Collect");

   t = null;

   GC.Collect();
   GC.WaitForPendingFinalizers();
   Console.WriteLine("After second Collect");

   Console.ReadLine();
  }

 }

 class Test
 {
  ~Test()
  {
   Console.WriteLine("Test Finalize");
  }
 }

}

Как вы думаете, что будет выведено на консоль в результате выполнения этого кода? Тех, кто уже запускает Visual Studio, хочу предупредить, что вопрос с подвохом.

 

Ответ на этот вопрос зависит от активной конфигурации (если речь идет о Visual Studio). В случае конфигурации Debug результат будет таким:

Test is created
After first Collect
Test Finalize
After second Collect

Видно, что объект стал мусором, после присваивания ему null. Давайте теперь изменим конфигурацию на Release:

Test is created
Test Finalize
After first Collect
After second Collect

Сразу же после создания, объект уничтожается сборщиком мусора. Почему так происходит? Дело в том, что в .NET время жизни локальной переменной не обязательно совпадает с концом блока. Оно может быть меньше, если компилятор определит, что переменная дальше не используется (как в нашем случае).
Почему же в конфигурации Debug получился другой результат? Это сделано специально, чтобы во время отладки можно было просматривать значения локальных переменных в пределах всей области видимости.

Из этого эксперимента можно сделать вывод: если вам уже не нужен какой-либо локальный объект и вы хотите, чтобы он побыстрее стал мусором, совсем не обязательно присваивать ему null - за вас об этом позаботится компилятор.

 

Логическая задача

Ответы на задачи из предыдущего выпуска смотрите на сайте рассылки: Логические задачи из книги "Принцесса или тигр".
Там же смотрите последнюю, двенадцатую, задачу из этой серии.

Сегодня я познакомлю вас с довольно забавной задачей. Забавность ее в том, что, когда люди узнают правильный ответ и получают логическое объяснение, они все равно настаивают на своем неверном ответе.

Существовало шоу, в котором игроку надо было выбрать одну из трех дверей. За одной из дверей был автомобиль, а за двумя другими по козлу. В случае, если игрок открывал дверь, за которой находился автомобиль, он становился его владельцем. В противном случае, оставался ни с чем. После того, как игрок выбирал дверь (она оставалась закрытой), ведущий открывал одну из двух оставшихся дверей, показывая, что за ней находится козел. Далее, ведущий предлагал игроку изменить свое решение и выбрать другую закрытую дверь или остаться при своем первоначальном решении.
Вопрос: как лучше поступить игроку с точки зрения максимальной вероятности выигрыша (изменится ли вероятность выигрыша, если игрок выбирает другую дверь).
Оставить свои ответы можно на странице с задачей.

 


На этом все. Желаю приятного программирования.


Технологический партнер рассылки:
PARKING.RU.
Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows (™): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(™), безопасность, гарантии.



Вопросы? Пожелания? Пишите: author@developerguru.net

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.gurudotnet
Отписаться
Вспомнить пароль

В избранное