我使用SMO从数据库获取存储过程列表.我已经对存储过程进行了循环,以便对它们进行预期的操作.但是我只需要使用用户创建的存储过程.我使用存储过程的IsSystemObject属性.然而它太慢了:
大约10秒:
foreach (StoredProcedure mystr in mydb.StoredProcedures)
{
if (!mystr.IsSystemObject)
{
classGenerated += mystr.Name + Environment.NewLine;
}
}
Run Code Online (Sandbox Code Playgroud)
不到1秒:
foreach (StoredProcedure mystr in mydb.StoredProcedures)
{
classGenerated += mystr.Name + Environment.NewLine;
}
Run Code Online (Sandbox Code Playgroud)
只有一个条件,这种差异是正常的吗?如果没有,这种性能差异的原因是什么?如果有另一种方法,我可以使用另一种方法来区分系统和非系统对象.
Ben*_*hul 11
是的.这就是原因.默认情况下,SMO会预取某些属性,并将其他属性保留为及时.因此,您基本上可以按程序调用,以确定它是否是系统过程.幸运的是,有一个修复.看看这篇BOL文章
SMO优化仅允许在创建对象时加载最小属性.访问未初始化的属性时,SMO会发出单个请求以从SQL Server实例加载信息.您可以使用此方法调整首次创建对象时初始化的属性,以进一步优化性能
| 归档时间: |
|
| 查看次数: |
1083 次 |
| 最近记录: |