1

我正在开发一个针对数据库执行任意脚本的 .NET 程序。

当一位同事开始编写数据库访问代码时,他只需将一个命令对象暴露给应用程序的其余部分,该命令对象将在每个语句中重复使用(设置CommandText/ Type、调用ExecuteNonQuery()等)。

我想这对于重复的、相同的语句来说是一个很大的性能损失,因为它们每次都被重新解析。

不过,我想知道的是:如果每个语句都与前一个语句不同(不仅参数不同,而且语句完全不同),这也会降低执行速度吗?我无法在文档中轻松找到答案。

顺便说一句,使用的 RDBMS 是 Oracle,但我想这个问题并不是特定于数据库的。

PS 我知道暴露同一个Command对象不是线程安全的,但这不是问题。

4

2 回答 2

2

创建新命令对象会涉及一些开销,因此在某些情况下重复使用相同的命令是有意义的。但作为对整个应用程序强制执行的一般情况,这似乎有点奇怪。

于 2009-08-27T15:30:18.690 回答
1

性能损失通常来自建立与数据库的连接,但 ADO.NET 创建了一个连接池来提供帮助。

如果您希望避免每次都重新解析语句,您可以将它们放入存储过程中。

我想你的同事只是使用了一些他从其他平台上继承的旧式方法,在这些平台上重用命令对象确实有所作为。

于 2009-08-27T15:26:57.667 回答