Ich verwende SMO, um ein Batch-SQL-Skript auszuführen. In Management Studio wird das Skript in ca. 2 Sekunden ausgeführt. Mit dem folgenden Code dauert es etwa 15 Sekunden.SQL SMO zum Ausführen von Batch-TSQL-Skript
var connectionString = GetConnectionString();
// need to use master because the DB in the connection string no longer exists
// because we dropped it already
var builder = new SqlConnectionStringBuilder(connectionString)
{
InitialCatalog = "master"
};
using (var sqlConnection = new SqlConnection(builder.ToString()))
{
var serverConnection = new ServerConnection(sqlConnection);
var server = new Server(serverConnection);
// hangs here for about 12 -15 seconds
server.ConnectionContext.ExecuteNonQuery(sql);
}
Das Skript erstellt eine neue Datenbank und fügt ein paar tausend Zeilen über ein paar Tische. Die resultierende DB-Größe beträgt ca. 5 MB.
Jeder hat irgendwelche Erfahrungen damit oder einen Vorschlag, warum das so langsam mit SMO läuft?
Ich würde sagen, das ist nicht etwas, worüber man sich sorgen muss, 15 Sekunden, um eine Datenbank zu erstellen, scheint vernünftig. Wenn Sie die Abfrage in SSMS ausführen, sind Sie bereits mit dem Server verbunden? Andere Client-Maschine? – MrEdmundo
Gleicher Client-Rechner. Das Öffnen der Verbindung scheint nicht so lange zu dauern, nur der ExecuteNonQuery-Aufruf. Die Sorge ist, dass dieser Schritt Teil der AssemblyInitialize-Methode für unsere Unit-Tests ist, so dass es zusätzliche 15 Sekunden dauert, die Unit-Tests zu starten, ist ein echtes Ärgernis. – Jeff
Jeder? Ich würde diese Skripte gerne für unsere Komponententests verwenden. – Jeff