65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 SMO 进行优化,因为延迟 - SQL Server Management Object - 脚本化表

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (1投票)

2012 年 10 月 7 日

CPOL
viewsIcon

11614

导出脚本时解决 SMO 延迟问题的方法。

引言

使用 SMO 进行优化 - SQL Server Management Object - 导出表。

背景

使用 SMO,以编程方式执行某些任务比 SQL Server 2008 Management Studio 导出所有数据库对象(表、存储过程、索引、数据等)的向导更容易。

以下 MSDN URL 将解释 SMO 的工作原理

http://msdn.microsoft.com/en-us/library/ms162169(v=sql.100).aspx 

Using the Code

我在使用 SMO 导出表(数百个)时遇到的一个问题是,使用 SMO 导出需要 2 小时,而使用 SSMS 向导只需要几分钟。一个解决方法是首先使用 PrefetchObject,然后使用多线程调用 script 方法。这使我将处理时间从 2 小时减少到 20 分钟。

使用 PrefetchObject 一次性加载表集合

Database db = ... // get your database root
ScriptingOptions so = new ScriptingOptions();
db.PrefetchObject(typeof(Table), so);

您还需要使用多线程(线程池或任务 Wink)调用您的脚本方法。

关注点

如果不调用 prefetchObject 方法,您的应用程序将向 SQL Server 发送大量往返请求以生成您的脚本。第二点是 SMO 没有使用多线程编写,因此您需要自己实现。

© . All rights reserved.