加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 无论如何加速SQL Server管理对象遍历现有数据库?

发布时间:2020-12-16 01:29:29 所属栏目:百科 来源:网络整理
导读:我目前正在使用SMO和C#来遍历数据库以创建表示两个数据库的各个方面的设置树,然后比较这些树以查看它们在何处以及如何不同. 问题是,对于2个合理大小的数据库,在本地抓取它们需要差不多10分钟,并收集我希望比较的表/列/存储过程信息. SMO是否有更好的接口以这
我目前正在使用SMO和C#来遍历数据库以创建表示两个数据库的各个方面的设置树,然后比较这些树以查看它们在何处以及如何不同.

问题是,对于2个合理大小的数据库,在本地抓取它们需要差不多10分钟,并收集我希望比较的表/列/存储过程信息.

SMO是否有更好的接口以这种方式访问??数据库?我想不包括任何其他依赖项,但我会把这种痛苦提高50%的速度.下面是我如何枚举表和列的示例.

Microsoft.SqlServer.Management.Smo.Database db = db_in;
        foreach (Table t in db.Tables)
        {
            if (t.IsSystemObject == false)
            {

                foreach (Column c in t.Columns)
                {
                }                    
            }
        }

解决方法

尝试强制SMO一次读取所有必需的字段,而不是查询访问.
有关更多信息,请参见 this blog

编辑:链接已死,但我在archive.org上找到了the page.这是相关的代码:

Server server = new Server();

// Force IsSystemObject to be returned by default.
server.SetDefaultInitFields(typeof(StoredProcedure),"IsSystemObject");

StoredProcedureCollection storedProcedures = server.Databases["AdventureWorks"].StoredProcedures;

foreach (StoredProcedure sp in storedProcedures) {
    if (!sp.IsSystemObject) {
        // We only want user stored procedures
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读