я следующий код:DbCommand с помощью блока
using (MySqlConnection conn = new MySqlConnection(connStr))
{
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM Events";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
От прочтения нескольких статей на этом сайте, предполагается, что DbCommand
должен быть в блоке с использованием, однако, я не могу понять, почему это необходим. Соединение закрыто, и что же такое DbCommand, которому требуется использовать блок? Действительно ли это, если класс наследует от IDisposable, что вы должен использовать блок или вручную Dispose?
Я запустил симулятор с 100 потоками над кодом выше, а также с кодом с использованием блока на DbCommand
, и я не видел реальных различий в использовании памяти.
Это будет MySqlCommand, однако, я спрашиваю, почему ** в этом конкретном примере потребуется использовать инструкцию using, а не почему это может быть хорошей практикой кодирования. Если у меня нет инструкции using для MySqlCommand в этом примере, есть ли утечка ресурса? –
Утечка ресурсов, если таковая имеется, будет внутри встроенного API MySQL, в этом случае будет 'MYSQL_RES', а не' mysql_free_result''d. Но это будет так. Объекты IDisposable обычно записываются так, что когда объект GC'd, нераспределенные ресурсы диспидируются. –