Ich habe eine C#-Anwendung mit der ich Daten auf verschiedene Art und Weiße anlysiere. Für eine Analyse verwenden ich den Assoziations-Alogrithmus vom MS Sql Server 2005. Die benötigten Daten selektiere ich davor und lasse sie in eine extra Tabelle eintragen. Dabei handelt es sich um 100000 - 2500000 Einträge.
Meine erste Lösung sah folgendermaßen aus: Die benötigten Daten wurden in eine List<Collection> gespeichert und anschließend via SqlCommand etc. in die DB eingetragen. Der Code sieht wie folgt aus:
public void InsertTmpData(List<MyCol3<string, int, int>> resultList)
{
SqlTransaction sqlTransaction;
using(SqlConnection sqlCon = new SqlConnection(_connection))
{
sqlCon.Open();
sqlTransaction = sqlCon.BeginTransaction();
try
{
using (SqlCommand sqlCmd = new SqlCommand("INSERT INTO tmpData (word,urlId) VALUES (@word,@urlId)"))
{
sqlCmd.Connection = sqlCon;
sqlCmd.Transaction = sqlTransaction;
for (int index = 0; index < resultList.Count; index++)
{
sqlCmd.Parameters.AddWithValue("@word", resultList[index].ValueA);
sqlCmd.Parameters.AddWithValue("@urlId", resultList[index].ValueC);
sqlCmd.ExecuteNonQuery();
sqlCmd.Parameters.Clear();
_tmpIndex = index;
OnIndexEvent();
}
}
sqlTransaction.Commit();
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
sqlTransaction.Rollback();
}
finally
{
sqlCon.Close();
}
}
}
Diese Variante hat bei ca. 2,3 Mio Einträge ca. 30 - 45 min gedauert. Das hat mir persönlich zu lange gedauert und ich habe nach weiteren Lösungmöglichkeiten gesucht. Gestern hatte ich die Idee, die Daten in ein XML File zu speichern und diese XML File anschließend mit einem SSIS-Datenfluss-Prozess in die Datenbank zu transferieren. Und sieh da, das Ganze dauert nicht einmal 3 Minuten. Der SSIS Task, der die Daten aus der XML-Datei in die Datenbank kopiert, brauchte ca. zwei Minuten.
Jetzt meine Frage, warum braucht mein Code 30 - 45 Minuten und der SSIS Task ca. 2 Minuten? Liegt es daran, dass SSIS viel dichter an der DB ist oder habe ich in meinem Code eine Bremse drinnen?