SqlParameter Size-设置为最大大小的负面影响?
时间:2020-03-06 14:47:18 来源:igfitidea点击:
我有一个SqlCommand,我想在其CommandType = Text上调用Prepare()(它不能是存储过程)。为此,我需要将参数的Size属性设置为非零,否则会引发异常。即使实际值的大小永远不会接近最大大小,将所有参数的大小设置为最大可能会有负面影响吗?有一个更好的方法吗?
解决方案
如果我们使用仅接受参数名称和值的SqlParameter构造函数,则框架就是采用这种方法。客户端可能效率不高,但是我从未注意到查询性能有所不同。
假设我们使用的是CommandType = Text,则应该能够以编程方式将大小设置为要发送的参数的实际大小。
仅当数据大小接近要发送的数据类型的最大大小时,性能才较差。如果参数相对于命令文本的大小总是很大,那么从网络流量的角度来看,切换到存储的proc只会看到最小的性能提升。
我认为这样做的唯一潜在负面影响就是为参数分配内存的成本。
由于我们正在调用" Prepare()",因此我猜测我们打算针对同一个SqlConnection多次使用SqlCommand,这暗示了可能使用该代码的离散部分(如果连接关闭了准备好的命令) ,则下一次使用时,命令文本将必须重新传输到服务器)。
如果我们知道参数的性质,似乎我们可能对它们的潜在大小有所了解。如果没有,那么我真的看不到有什么选择,而不是为每个大的声明一个足够大的大小以容纳大多数/任何潜在值。
请发布代码示例。我们不需要在参数上设置Size属性即可调用.Prepare()。
顺便说一句,我们可能真的不需要调用.Prepare(),尤其是如果我们之后立即调用.Execute()时。