Wir implementieren MS SQL Server
localdb
für Integrationstests.Verbessern Sie die Leistung der Dacpac-Bereitstellung mit C#
Wir erstellen ein Datenbankprojekt und die resultierende Datei dacpac
wird kopiert, damit sie vom IntegrationTests-Projekt verwendet werden kann. Bisher haben wir:
DatabaseProject.sqlproj
bin/debug/DatabaseProject.dacpac
IntegrationTests.csproj
bin/debug/DatabaseProject.dacpac
Wir haben einen Montageaufbau in dem IntegrationTests Projekt, bei dem eine neue neue Datenbank erstellt wird und die dacpac
auf localdb
eingesetzt. Im TearDown wird die Datenbank gelöscht, so dass wir einen deterministischen Status zum Testen haben.
Dies ist der Code, der die dacpac
, die DacServices
(Microsoft.SqlServer.Dac
, System.Data.SqlLocalDb
, System.Data.SqlClient
) verwendet entfaltet:
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
);
}
Wir haben jetzt ein paar Datenbank-Projekte, und es dauert ungefähr 8s bereitstellen Jeder. Dies erhöht die Gesamtzeit zum Ausführen der Tests.
Ist es irgendwie möglich, die Bereitstellungsleistung des dacpac
zu verbessern?
Visual Studio bietet Möglichkeiten, herauszufinden, welche Anweisungen Zeit brauchen, versuchen Sie, sie fein abzustimmen.Wenn Sie nicht in der Lage sind, sie zu optimieren, versuchen Sie Parallelität zu verwenden, um mehrere Projekte in Parallel – TheGameiswar
müssen Sie wirklich erstellen die Datenbank in einem separaten Schritt? Ohne sich selbst zu testen, vergleicht "dacservices" möglicherweise alle Objekte im dacpac mit ihren Gegenstücken in der leeren Datenbank. –
@GavinCampbell, TheGamesiwar, beide Kommentare waren nützlich und erlaubten mir, die Gesamtzeit für 4 Datenbanken von 25s auf 4.5s zu verringern. – jruizaranguren