Освобождение ресурсов

Здраствуйте! подскажите пожалуйста как можно вручную освободить ресурсы объекта CustomQuery. Я не могу вызвать мотод Dispose() так как этот класс не реализует интерфейс IDisposable.

Нравится

6 комментариев

Добрый день!

            public static bool IsSchemaExistsInDB(UserConnection userConnection, EntitySchema entitySchema) {
                    string sqlText = userConnection.DBEngine.GetIsEntitySchemaExistSqlText();
                    var checkSchemaExistCustomQuery = new CustomQuery(userConnection, sqlText)
                           .WithParameter("EntitySchemaName", entitySchema.Name);
                    if (sqlText.Contains("@DBSchemaName") || sqlText.Contains(":DBSchemaName")) {
                           checkSchemaExistCustomQuery.WithParameter("DBSchemaName", userConnection.DBEngine.CurrentSchemaName);
                    }
                    using (DBExecutor dbExecutor = userConnection.EnsureDBConnection()) {
                           using (IDataReader dataReader = checkSchemaExistCustomQuery.ExecuteReader(dbExecutor)) {   // (!)
                                  return dataReader.Read();
                           }
                    }
             }

CustomQuery не использует Disponse, так как он не хранит данные.

После выполнения CustomQuery запроса возвращается специальный тип IDataReader, который умеет читать данные запроса. После выхода за пределы using он автоматически освобождает память.

А если делать insert в базу, using тогда не используется. Возможно ли в этом случае вручную освободить ресурсы после команды Execute() ?

Владимир, вышлите пример кода с insert. Стало не совсем понятно, какие ресурсы вы хотите освободить.

Для примера

В текущем примере ничего не нужно Dispose-ить, так как здесь нет переменных, которые работают с неуправляемой памятью.
Переменные без проблем освободит сборщик мусора.

Вся магия происходит в методе Execute. Внутри этого метода в using-е создастся DBExecuter, который выполнит ваш SQL и автоматически освободит подключение к БД.

Понятно. Спасибо!

Показать все комментарии