Подготовленные операторы SQL и IDisposable

ПРИМЕЧАНИЕ. Это не дубликат Что делает SqlCommand.Prepare() и когда его следует использовать? или Пул соединений SQLite/C# и путаница с подготовленными операторами или другие вопросы, связанные с переполнением стека. Я не спрашиваю, подходят ли подготовленные операторы для моего варианта использования. Я спрашиваю, как использовать их вместе с IDisposable. КОНЕЦ ПРИМЕЧАНИЕ

У меня есть программа С#, которая использует около 100 операторов SQL. Я создаю SQLiteCommand внутри блока using каждый раз, когда мне это нужно:

string query = @"select ... ";
using (SQLiteCommand cmd = new SQLiteCommand(query, conn)) 
{
    cmd.Parameters.Add(new SQLiteParameter( ... ));
    using (SQLiteDataReader dr = cmd.ExecuteReader()) 
    {
        while (dr.Read()) {
        ...
        }
    }
}

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

Моя дилемма заключается в том, что DbCommand реализует I Disposable, и каждый пример, который я вижу, показывает, что команда удаляется, как только выполняется оператор SQL.

Можно ли не удалять DbCommand после выполнения оператора SQL? Какие побочные эффекты это будет иметь? В качестве альтернативы, если я избавлюсь от команды, как мне добиться потока «компилировать один раз, выполнить несколько раз».


person George    schedule 20.11.2015    source источник
comment
вы, возможно, столкнетесь с такими вещами, как Object not set to Instance, если они не будут утилизированы и/или правильно созданы, вы можете столкнуться с высоким использованием памяти и/или утечками памяти, GC не всегда происходит немедленно. использование, на мой взгляд, является гораздо лучшим подходом, а не повторяя тонну повторяющегося кода повсюду в вашем решении, создайте пользовательский класс, который обрабатывает Sql как параметр, также если вы только возвращаете данные.. метод возвращает DataTable и т. д.. если вам нужен пример того, как это сделано, я могу опубликовать пример   -  person MethodMan    schedule 21.11.2015
comment
Прежде чем пойти по этому пути, измеряли ли вы и сравнивали ли вы метрики подготовленного оператора (и хранили его в памяти) с созданием их по мере необходимости?   -  person Clay Ver Valen    schedule 21.11.2015