MultiThreading mit SQL Server WOW!!!

  • C#
  • .NET 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von HenryV.

    MultiThreading mit SQL Server WOW!!!

    Neu

    Hallo Liebe Gemeinde,

    Erstmal Danke an alle hier im Forum, Ihr seid einfach Super und sehr geduldig :-).

    Nun zu meinen Erfolgen sowie auch einem Problem, was ich nicht lösen kann bzw. nicht weiß wie ich das verhindern ändern kann.

    Erfolge:
    Habe es heute endlich geschafft meinen SQL-Test im Multithreading abzuschließen und bin begeistert.
    konnte mit 20 Threads in meine Lokale SQL-Devoloper Datenbank schreiben.
    Test war 1000000 Datensätze simultan in die Tabelle zu schreiben.
    Das funktioniert wunderbar hat nur 86 sek. gedauert. Für lokal und für einen Test supi.

    Problem:
    Jedoch mache ich beim erstellen der Tabelle noch was Falsch. Und zwar zeigt er mir einen Indexierungsfehler bei diesem Schlüssel an(Bild Anhang). Dieser Schlüssel wird automatisch vom System erstellt und ich musste Ihn löschen damit es Problemlos funktioniert. Nur gehe ich mal davon aus das es einen besseren weg gibt ohne den Schlüssel zu löschen. Hier mal der Code mit dem ich die Tabelle erstelle.

    C#-Quellcode

    1. public void CreateNewRealTimeTable(string _TableName)
    2. {
    3. SqlConnection con = new SqlConnection
    4. {
    5. ConnectionString = "Data Source= ***********\\TZCADSQLSERVER;" +
    6. "Initial Catalog = RealTimeDatabase;" +
    7. "Integrated Security= True;"
    8. };
    9. con.Open();
    10. _TableName = "CREATE TABLE " + _TableName;
    11. _TableName = _TableName + "(InstrumentID int NOT NULL PRIMARY KEY,";
    12. _TableName = _TableName + "Instrument NCHAR(6) NULL,";
    13. _TableName = _TableName + "Time datetime NULL,";
    14. _TableName = _TableName + "Bid NUMERIC(18, 7) NULL,";
    15. _TableName = _TableName + "Ask NUMERIC(18, 7) NULL,";
    16. _TableName = _TableName + "High NUMERIC(18, 7) NULL,";
    17. _TableName = _TableName + "Low NUMERIC(18, 7) NULL,";
    18. _TableName = _TableName + "PipCost NUMERIC(18, 7) NULL);";
    19. using (SqlCommand cmd = new SqlCommand(_TableName, con))
    20. {
    21. cmd.ExecuteNonQuery();
    22. }
    23. }


    Gruß
    Bilder
    • PK_Schlüssel.PNG

      11 kB, 309×242, 8 mal angesehen

    Neu

    Habe das Problem gelöst ohne den Schlüssel löschen zu müssen. Das problem lag beim erstellen der Threads. eine kleine sleep Schleife hat das Problem gelöst.

    C#-Quellcode

    1. private void StartThreads(object source, EventArgs args)
    2. {
    3. int anzahlthreads = 30;
    4. for (int i = 0; i <= anzahlthreads - 1; i ++)
    5. {
    6. int _ThreadNr = i + 1;
    7. String _Threadname;
    8. _Threadname = "Thread_" + _ThreadNr.ToString();
    9. System.Threading.Thread thread = new System.Threading.Thread(delegate () { Addrows2(i, 1000000, anzahlthreads, _Threadname); });
    10. thread.Start();
    11. System.Threading.Thread.Sleep(10);
    12. }
    13. _endtime = System.DateTime.Now;
    14. }


    ohne die sleep anweisung, haben manchmal 2 Threads den selben Index erstellt. warum, kann ich leider nicht sagen. aber jetzt funktioniert es.

    In der praxis werde ich bei meinem System, niemals gleichzeitig soviele Threads brauchen, es ist halt nur ein Test um zu sehen was möglich ist.