我們正在部署到MS SQL Server
localdb
進行集成測試dacpac部署的性能。提高使用C#
我們建立了一個數據庫項目,並將所得dacpac
文件被複制,以由IntegrationTests項目中使用。到目前爲止,我們有:
DatabaseProject.sqlproj
bin/debug/DatabaseProject.dacpac
IntegrationTests.csproj
bin/debug/DatabaseProject.dacpac
我們在創建一個新的全新數據庫的IntegrationTests項目的組件設置和dacpac
部署到localdb
。在TearDown中,數據庫被刪除,所以我們有一個確定性的測試狀態。
這是部署dacpac
的代碼,它使用DacServices
(Microsoft.SqlServer.Dac
,System.Data.SqlLocalDb
,System.Data.SqlClient
):我們現在有一對夫婦的數據庫項目的
public void CreateAndInitializeFromDacpac(
ISqlLocalDbInstance localDbInstance,
string databaseName,
string connectionString,
string dacpacPath)
{
using (var cx = localDbInstance.CreateConnection())
{
cx.Open();
using (var command = new SqlCommand(
string.Format("CREATE DATABASE {0}", databaseName), cx))
command.ExecuteNonQuery();
}
var svc = new DacServices(connectionString);
svc.Deploy(
DacPackage.Load(dacpacPath),
databaseName,
true
);
}
,大約需要787-8部署每一個。這增加了執行測試的總時間。
是否有可能以某種方式提高dacpac
的部署表現?
Visual studio提供了找出跟蹤哪些語句需要花費時間的方法,嘗試微調它們。如果您無法對它們進行微調,請嘗試使用並行性來並行部署多個項目。 – TheGameiswar
您是否真的需要創建數據庫在一個單獨的步驟?如果不自己測試,'dacservices'可能會將dacpac中的所有對象與空數據庫中的對象進行比較。 –
@GavinCampbell,TheGamesiwar,你的評論都很有用,並且允許我將4個數據庫的總體時間從25秒縮短到4.5秒。 – jruizaranguren