ПРИМЕЧАНИЕ. Это не дубликат Что делает 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? Какие побочные эффекты это будет иметь? В качестве альтернативы, если я избавлюсь от команды, как мне добиться потока «компилировать один раз, выполнить несколько раз».
Object not set to Instance
, если они не будут утилизированы и/или правильно созданы, вы можете столкнуться с высоким использованием памяти и/или утечками памяти,GC
не всегда происходит немедленно. использование, на мой взгляд, является гораздо лучшим подходом, а не повторяя тонну повторяющегося кода повсюду в вашем решении, создайте пользовательский класс, который обрабатывает Sql как параметр, также если вы только возвращаете данные.. метод возвращаетDataTable
и т. д.. если вам нужен пример того, как это сделано, я могу опубликовать пример - person MethodMan   schedule 21.11.2015