Это хорошая идея, чтобы повторно использовать объекты команд ADO.NET? - PullRequest
1 голос
/ 27 августа 2009

Я работаю над программой .NET, которая выполняет произвольные сценарии для базы данных.

Когда коллега начал писать код доступа к базе данных, он просто предоставил один объект команды остальному приложению, которое используется повторно (настройка CommandText / Type, вызов ExecuteNonQuery() и т. Д.) Для каждого оператора .

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

Что меня интересует, так это то, ухудшит ли это также скорость выполнения, если каждый оператор отличается от предыдущего (не только разные параметры, но и совершенно другой оператор)? Я не мог легко найти ответ на этот вопрос в документации.

Кстати, используемая СУБД - это Oracle, но я думаю, что этот вопрос не является специфическим для базы данных.

P.S. Я знаю, что экспонирование того же объекта Command не является потокобезопасным, но здесь это не проблема.

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

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

1 голос
/ 27 августа 2009

Обычно снижение производительности происходит от установления соединения с базой данных, но ADO.NET создает пул соединений, чтобы помочь здесь.

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

Я полагаю, ваш коллега просто использует какой-то старый стиль, который он унаследовал от работы на других платформах, где повторное использование командного объекта имело значение.

...