Я записал довольно всестороннее сообщение, которое должно помочь объяснить о финализаторах, IDisposable, и когда необходимо использовать один или другой: http://gregbee.ch/blog/implementing-and-using-the-idisposable-interface
, Вероятно, самая соответствующая часть заключается в кавычки ниже:
при использовании неуправляемых ресурсов, таких как дескрипторы и соединения с базой данных необходимо удостовериться, что они сохранены для минимального количества времени, использование принципа получает поздно и выпускает рано. В C++, высвобождающем средства, обычно делается в деструкторе, который детерминировано выполняется в точке, где объект удален. Время выполнения.NET, однако, использует сборщик "мусора" (GC), чтобы вымыться и исправить память, используемую объектами, которые больше не достижимы; поскольку это работает на периодическом основании, это означает, что точка, в которой очищен Ваш объект, недетерминирована. Последствие этого - то, что деструкторы не существуют для управляемых объектов, поскольку нет никакого детерминированного места для выполнения их.
Вместо деструкторов, C# имеет финализаторы, которые реализованы путем переопределения Завершить метода, определенного на классе базового объекта (хотя C# несколько смутно использует синтаксис деструктора C++ ~Object для этого). Если объект переопределяет Завершить метод тогда вместо того, чтобы быть собранным GC, когда это вне объема, GC помещает его в очередь финализатора. В следующем цикле GC все финализаторы на очереди выполняются (на единственном потоке в текущей реализации) и память от завершенных исправленных объектов. Довольно очевидно из этого, почему Вы не хотите делать, моются в финализаторе: требуется два цикла GC для сбора объекта вместо одного и существует единственный поток, куда все финализаторы выполняются, в то время как любой поток приостановлен, таким образом, это собирается повредить производительность.
Поэтому, если у Вас нет деструкторов, и Вы не хотите покидать очистку финализатору, тогда единственная опция состоит в том, чтобы вручную, детерминировано, очистить объект. Введите интерфейс IDisposable, который предоставляет стандарт для поддержки этой функциональности и определяет отдельный метод, Расположите, где Вы вставляете логику очистки для объекта. Когда используется в наконец блоке, этот интерфейс предоставляет эквивалентную функциональность деструкторам. Причина наконец блоков в коде состоит в том, чтобы, прежде всего, поддерживать интерфейс IDisposable; это - то, почему использование C++ просто пробует/за исключением нет никакой потребности в наконец блок с деструкторами.
GitGui поставляется с git. У меня это всегда отлично работало. У вас какие-то проблемы?
Скриншот:
В Windows есть TortoiseGit . Он не такой зрелый, как TortoiseSVN, но я его использовал, и он работает достаточно хорошо для моих целей.
Снимок экрана:
РЕДАКТИРОВАТЬ [декабрь 2014 г.]: я также рекомендую посмотреть ответ Дэна . Пользовательский интерфейс Github, вероятно, является наиболее зрелым / поддерживаемым инструментом на данный момент (даже если вы не используете Github!)
Существует собственный порт Git для Windows, который называется mysysgit.
Если вы используете Eclipse, есть клиент Git, который подключается к нему - egit. TortoiseGit - это автономный клиент с графическим интерфейсом. Git # / GitSharp - это клиент для git для .NET.
Надеемся, что пользователи Mac смогут предоставить несколько примеров для MacOS.
Наслаждайтесь!
В русле обучения ловле рыбы : взгляните на страницу https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools в Git Wiki, где есть раздел о графических интерфейсах.
На главной странице Git также есть раздел, посвященный графическим интерфейсам: http://git-scm.com/downloads/guis
Расширения Git для Windows отлично работают и интегрируются с Visual Studio (если вам это нужно). Я не пробовал TortoiseGit, но слышал, что он не совсем готов.
На Mac я пробовал GitX и не очень впечатлен. Похоже, что отсутствуют многие команды git, и мне приходится регулярно пользоваться терминалом. Есть еще один под названием Gity, но он очень новый, и я его еще не пробовал. Сейчас он бесплатный, но я думаю, что он закончится, когда он достигнет 1.0.