@ Джонатан Спасибо! Я только что посмотрел, что на самом деле означает «не стоит беспокоиться» - немного отличается от того, что я имел в виду ... Если бы не ваш первый комментарий, я, вероятно, все равно использовал бы его неправильно.

впервые вышел .NET, я был одним из многих, кто жаловался на отсутствие детерминированной финализации в .NET (деструкторы классов вызываются по непредсказуемому расписанию). Компромисс, придуманный Microsoft в то время, былusing заявление.

Хотя не идеально, я думаю, используяusing важно обеспечить своевременную очистку неуправляемых ресурсов.

Тем не менее, я пишу некоторый код ADO.NET и заметил, что почти каждый класс реализуетIDisposable, Это приводит к коду, который выглядит следующим образом.

using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
using (SqlCommandBuilder builder = new SqlCommandBuilder(adapter))
using (DataSet dataset = new DataSet())
{
    command.Parameters.AddWithValue("@FirstValue", 2);
    command.Parameters.AddWithValue("@SecondValue", 3);

    adapter.Fill(dataset);

    DataTable table = dataset.Tables[0];
    foreach (DataRow row in table.Rows) // search whole table
    {
        if ((int)row["Id"] == 4)
        {
            row["Value2"] = 12345;
        }
        else if ((int)row["Id"] == 5)
        {
            row.Delete();
        }
    }
    adapter.Update(table);
}

I сильно подозреваю, мне не нужны все этиusing заявления. Но без детального понимания кода для каждого класса трудно определить, какие из них я могу пропустить. Результаты немного уродливы и отвлекают от основной логики в моем коде.

Кто-нибудь знает, почему все эти классы нужно реализоватьIDisposable? (У Microsoft многопримеры кода онлайн которые не беспокоятся об утилизации многих из этих объектов.) Пишут ли другие разработчикиusing заявления для всех из них? И, если нет, как вы решаете, без чего можно обойтись?

Ответы на вопрос(3)

Ваш ответ на вопрос