Почему примеры MSDN только обертывают SqlConnection при использовании блока (метод удаления вызова)? [Дубликат]

Объявляет анонимную функцию, затем называет ее:

(function (local_arg) {
   // anonymous function
   console.log(local_arg);
})(arg);
4
задан Omu 12 February 2010 в 14:30
поделиться

2 ответа

Вам нужен using для каждого создаваемого вами объекта, который реализует IDisposable. Это включает в себя SqlCommand и SqlConnection.


За этим правилом очень мало исключений. Основным исключением являются прокси-клиенты WCF. Из-за недостатка дизайна их метод Dispose иногда может вызывать исключение. Если вы использовали прокси-сервер в инструкции using, это второе исключение может привести к потере исходного исключения.

10
ответ дан John Saunders 21 August 2018 в 07:21
поделиться
  • 1
    +1, но, чтобы быть совершенно понятным по проблеме WCF: это не означает, что вы должны просто игнорировать, что клиент является одноразовым. Скорее, это означает, что вы должны завернуть вызов в блок try / finally и завернуть операцию Close / Dispose внутри блока finally в блоке try / catch. Очень уродливо, хотя ... – Mark Seemann 12 February 2010 в 14:42
  • 2
    @MarkSeemann Я обнаружил, что использование перегруженных методов помогает очистить такую ​​попытку ... наконец, беспорядок много. Это личное мнение, конечно. – Pijusn 14 October 2013 в 19:33
  • 3
    Я не согласен с условиями & quot; нуждами & quot; и "правило" неквалифицированный .. это "правило" при соблюдении нашей лучшей практики «политика». Тем не менее, этот вопрос поднимает вопрос с SqlCommand (DbCommand), который строится / инициализируется с помощью SqlConnection (DbConnection). Вызывается ли DbConnection, когда вызывается DbCommand.Dispose ()? – Brett Caswell 25 November 2015 в 20:27
  • 4
    @brett: В целом неквалифицированные утверждения лучше. Возможно, 20% разработчиков .NET должны рассмотреть возможность нарушения этого правила. Я имею в виду 20% самых опытных. В остальном это должно быть «необходимо». и "правило". – John Saunders 25 November 2015 в 20:37
  • 5
    @brett, что касается DbConnection, взгляните на код и посмотрите. Но было бы плохой идеей зависеть от недокументированной функциональности. – John Saunders 25 November 2015 в 20:39

Вам НЕОБХОДИМО использовать инструкцию using, но это хорошая практика, и вы ДОЛЖНЫ использовать ее. Это позволяет объектам, использующим IDisposable, удаляться автоматически.

http://msdn.microsoft.com/en-us/library/yh598w02 (VS.80) .aspx

Отредактировано, чтобы добавить ссылку и удалить неточную инструкцию, потому что @John Saunders прав.

4
ответ дан David 21 August 2018 в 07:21
поделиться
  • 1
    IDisposable не касается использования памяти. Это о ресурсе . – John Saunders 12 February 2010 в 14:37
  • 2
    Я думал, что, поскольку соединение было использовано для создания команды, чем когда вы ее уничтожаете, команда также будет удалена – Omu 12 February 2010 в 14:38
  • 3
    но предположительно SqlCommand не держит никаких ресурсов открытым, поскольку соединение, которое создало SqlCommand, было закрыто ... – rohancragg 12 February 2010 в 14:39
  • 4
    @Omu: Нет, не документировано как таковое, так что предположим, что это неправда. – John Saunders 12 February 2010 в 14:44
  • 5
    @rohancragg: Я бы не делал предположений о чем-то подобном. Даже если это было правдой в текущем выпуске, это может быть неверно в некоторых будущих выпусках. – John Saunders 12 February 2010 в 14:45
Другие вопросы по тегам:

Похожие вопросы: