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





1.00/5 (1投票)
导出脚本时解决 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);
您还需要使用多线程(线程池或任务 )调用您的脚本方法。
关注点
如果不调用 prefetchObject
方法,您的应用程序将向 SQL Server 发送大量往返请求以生成您的脚本。第二点是 SMO 没有使用多线程编写,因此您需要自己实现。