C# 消除性能开销

C# 消除性能开销,c#,.net,sql,sql-server,database,C#,.net,Sql,Sql Server,Database,我已将应用程序中的性能开销缩小到以下模块: Server currentServer = new Server(databaseConnection.DataSource); Database currentDatabase = currentServer.Databases[databaseConnection.InitialCatalog]; foreach (View view in currentDatabase.Views) { if (view.IsSystemObject

我已将应用程序中的性能开销缩小到以下模块:

Server currentServer = new Server(databaseConnection.DataSource);
Database currentDatabase = currentServer.Databases[databaseConnection.InitialCatalog];

foreach (View view in currentDatabase.Views)
{
    if (view.IsSystemObject == false)
    {
        if (view.Name.Equals(viewName))
        {
            MessageBox.Show(parent, "A virtual table with that name already exists! Virtual\ntable not created.", "Not created", MessageBoxButton.OK, MessageBoxImage.Information);
            break;
         }
         else
         {
             valid = true;
             break;
         }
    }
}
我基本上希望迭代不属于系统的数据库视图。但是,使用这种方法,
SMO
库会在所有视图中迭代。你知道怎么安排吗

编辑:


例如,我只有大约10个用户定义的视图,但有1000多个系统视图。如何跳过系统视图并只遍历用户定义的视图?

不清楚您使用的是什么API-但是如果您下拉到常规TSQL/ADO.NET,您可以查看类似于
信息\u架构视图
/
系统视图
,它们只包含用户定义的视图。系统视图位于
sys.system\u视图中
(两者均位于
sys.all\u视图中
)。这将在服务器上执行所有限制,因此,如果您查询
信息\u SCHEMA.VIEWS
/
sys.VIEWS
,通过连线返回的唯一数据就是您感兴趣的数据。如果在客户端进行筛选,则需要付费传输所有不感兴趣的数据。

这不是一个大的性能瓶颈。你在用这些视图做什么。。。这就是慢的部分。@Hogan-我已经添加了完整的代码。系统在这上面花的时间太长了。现在我明白了。还显示了currentDatabase.Views的定义——我猜这就是对server@Hogan-编辑了代码。@Hogan
Views
这里大概是SMO,它填充了数据库中所有视图的集合(不影响用户视图和系统视图)。谢谢您的建议。所以你建议我忘记SMO库来完成这项任务?@DotNET如果有人带着一个很好的方法来使用SMO,那就好了。我只是说,若并没有好的SMO选项,那个么替代方案就存在了。@DotNET使用编辑过的代码,您需要传输更少的数据-只需要一个
存在的
测试,所以返回一行。见鬼,你甚至可以使用
OBJECT\u ID(@name)
并检查null/not null是的,如果他只是想看看某个名称的视图是否存在,那么查询IMFORMATION\u SCHEMA视图就是最好的选择。从未使用过SMO,所以谁知道呢。谢谢大家,我会研究这个方法。但是,稍后还将执行进一步的操作,即获取所有这些视图的名称。这个方法在这方面也有帮助吗?