Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# smo的IsSystemObject属性_C#_Sql Server_Smo - Fatal编程技术网

C# smo的IsSystemObject属性

C# smo的IsSystemObject属性,c#,sql-server,smo,C#,Sql Server,Smo,我使用SMO从数据库中获取存储过程列表。我对存储过程进行了foreach循环,以便对它们进行预期的操作。但是,我只需要使用用户创建的存储过程。我使用存储过程的IsSystemObject属性。然而,它是如此缓慢: 大约10秒: foreach (StoredProcedure mystr in mydb.StoredProcedures) { if (!mystr.IsSystemObject) { classGenerated += mystr.Name + E

我使用SMO从数据库中获取存储过程列表。我对存储过程进行了foreach循环,以便对它们进行预期的操作。但是,我只需要使用用户创建的存储过程。我使用存储过程的IsSystemObject属性。然而,它是如此缓慢:

大约10秒:

foreach (StoredProcedure mystr in mydb.StoredProcedures)
{
    if (!mystr.IsSystemObject)
    {
        classGenerated += mystr.Name + Environment.NewLine;
    }
}
小于1秒:

foreach (StoredProcedure mystr in mydb.StoredProcedures)
{    
    classGenerated += mystr.Name + Environment.NewLine;
}

仅在一种if条件下,这种差异正常吗?如果没有,造成这种性能差异的原因是什么?如果有其他方法,我可以使用另一种方法来区分系统对象和非系统对象。

是的。这就是原因。SMO在默认情况下预取某些属性,并将其他属性保留为即时属性。所以,基本上每个过程都会得到一个调用,以确定它是否是一个系统过程。幸运的是,有一个解决方案。退房

SMO优化只允许在以下情况下加载最小属性: 创建一个对象。当访问未初始化的属性时,SMO 单独请求从的实例加载信息 SQL Server。您可以使用此方法调整要修改的特性 在首次创建对象以进一步优化时对其进行初始化 演出


是的,成功了。我已将VB语法更改为C#。对于其他用户,这里有更好的用法:myserver.GetDefaultInitFields(typeof(StoredProcedure));SetDefaultInitFields(typeof(storedProcess),“IsSystemObject”);这个链接没有显示VB,所以这里是我使用的:myserver.SetDefaultInitFields(GetType(Microsoft.SqlServer.Management.Smo.StoredProcedure),“IsSystemObject”)我不是VB爱好者,但我使用的是
GetType(Microsoft.SqlServer.Management.Smo.StoredP)‌​过程)
是否正确返回存储过程类型?