我们的数据访问层使用命令对象与sql server 进行通信。
在大多数情况下,我已将字段大小(与 sql server 中的列大小匹配)硬编码到命令参数生成器中。
Such as:
SqlParameter param = new SqlParameter("@name", NVarChar, 4000);
与仅将其保留为 0 相比,在此处指定一个值(本例中为 4000)有什么优势?当列大小发生变化时必须重新编译,这很痛苦。
其实是相当重要的。使用不同参数长度发出的相同请求最终为不同的过程缓存中的查询。随着时间的推移,这会导致缓存污染和过度活跃的编译事件。此问题是 Linq2SQL 和 EF 提供程序的实现方式中的主要设计缺陷之一,例如。看数据访问代码如何影响数据库性能 https://learn.microsoft.com/en-us/archive/msdn-magazine/2009/brownfield/how-data-access-code-affects-database-performance#id0070056。另请参阅未正确指定参数长度时的查询性能和计划缓存问题 https://learn.microsoft.com/en-us/archive/blogs/psssql/query-performance-and-plan-cache-issues-when-parameter-length-not-specified-correctly对于一个相关的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)