SqlDataAdapter.Fill manchmal Langsam manchmal schnell?



  • Hallo,

    ich habe das Problem das die Fill function vom SqlDataAdapter manchmal 5-10 Sekunden braucht und machmal millisekunden...

    Ich möchte einfach:

    SqlConnection connection = new SqlConnection(connectionString);
    SqlDataAdapter dataSetAdapter = new SqlDataAdapter("SELECT * FROM " + tableName + " ORDER BY ID_Sort", connection);
    DataSet tempDataSet = new DataSet(tableName);
    dataSetAdapter.Fill(tempDataSet, tableName);
    

    Kann es sein das intern noch irgendwelche Ressource noch irgendwo liegen? (Ich dispose alle Sql Klassen) Oder is das manchmal so?

    Wäre nett wenn ihr mir ein bisschen hilft...

    Danke

    H²O



  • was möchtest du denn machen? eine ganz normale abfrage ?



  • Ja ich möchte einfach alle Daten von der Datenbank holen. Und was mir auch noch aufgefallen ist das es nur am anfang ist. Läd er vielleicht alles in den Cache um beim nächsten mal schneller zu sein?



  • nee wenn du einfach nur ein Select machen möchtest, nimm dazu etwas anderes was viel einfacher geht hier ein beispiel:

    SqlConnection con = new SqlConnection(connectionstring);//hier kommt natürlich dein connectionstring rein
      con.Open();
      string strSQL ="SELECT * FROM " + tableName + " ORDER BY ID_Sort";
      SqlCommand cmd = new SqlCommand(strSQL, con);
      SqlDataReader dr = cmd.ExecuteReader();
      while(dr.Read())
      {
         Console.Writeline(dr[" "]);//zwischen die Leerzeichen muss natürlich die Spalte rein die du auslesen willst
      }
      dr.Close();
      con.Close();
    }
    

    so sollte es klappen



  • Ja aber ich benutze ja das DataSet in meinen Programm weiter... Also bleibt mir da keine andere möglichkeit als den SqlDataAdapter zu benutzen. Weil ich später das SQL zeug in ne Klasse kapseln will falls mal Access oder so mit rein kommt 😉



  • Ich würde deine Frage mal in ein anderes Forum posten.
    http://entwickler-forum.de/forumdisplay.php?f=4

    Ich habe sehr gute Erfahrungen in diesem Forum bezüglich ADO.NET gemacht.

    (Du kannst ja auf diese Forum referenzieren.)

    Simon



  • Wenn du ein RDBMS benutzt dann wird das Ergebnis im Cache abgelegt.
    Somit bekommst DU es beim nächsten Mal schneller.
    Besonderes zu beobachten bei MSSQL.
    MSSQL lädt sich auch bei genügend speicher die ganze Tabelle rein.
    Das geht dann auch schneller. u.s.w.



  • Die Fill-Methode muss erst die Datenbank öffnen und dann kommt es drauf an wie die schnell diese antwortet und Daten liefert. Das heisst, Du hast hier keine Möglichkeit was an Deinem Programm zu verbessern, denn es ist bereits optimal. Optimiere Dein Netzwerk, Deine Datenbank und deren Ressourcen.

    Das Beispiel von Firefighter ist murks, denn intern passiert genau dasselbe nur dass er noch die Daten per Hand liest und per Hand verwaltet - für was dann .NET? So kann man gleich bei native C bleiben.



  • SeboStone schrieb:

    Die Fill-Methode muss erst die Datenbank öffnen und dann kommt es drauf an wie die schnell diese antwortet und Daten liefert. Das heisst, Du hast hier keine Möglichkeit was an Deinem Programm zu verbessern, denn es ist bereits optimal. Optimiere Dein Netzwerk, Deine Datenbank und deren Ressourcen.

    Das Beispiel von Firefighter ist murks, denn SqlAdapter-intern passiert genau dasselbe nur dass er noch die Daten per Hand liest und per Hand verwaltet - für was dann .NET? So kann man gleich bei native C bleiben.

    Ansonsten würde ich Dir noch linq empfehlen.



  • SeboStone schrieb:

    Die Fill-Methode muss erst die Datenbank öffnen und dann kommt es drauf an wie die schnell diese antwortet und Daten liefert. Das heisst, Du hast hier keine Möglichkeit was an Deinem Programm zu verbessern, denn es ist bereits optimal. Optimiere Dein Netzwerk, Deine Datenbank und deren Ressourcen.

    Das Beispiel von Firefighter ist murks, denn intern passiert genau dasselbe nur dass er noch die Daten per Hand liest und per Hand verwaltet - für was dann .NET? So kann man gleich bei native C bleiben.

    Ah Danke. Ich hätt jetzt noch ewig lang im Code weiter gewütet. Auf was muss ich in der Datenbank achten? Ich erstelle die Datenbank (falls nicht vorhanden in meinen Programm, nicht in Sql Visual Studio Express, damit bei Serverwechsel etc man nicht immer die Datenbank neu machen muss und weil ich mich mit dem Visual Studio noch nicht so gut auskenne. Auf was muss ich achten falls ich die Performence verbessern möchte?

    Wenn du ein RDBMS benutzt dann wird das Ergebnis im Cache abgelegt.
    Somit bekommst DU es beim nächsten Mal schneller.
    Besonderes zu beobachten bei MSSQL.
    MSSQL lädt sich auch bei genügend speicher die ganze Tabelle rein.
    Das geht dann auch schneller. u.s.w.

    Ich wusste doch das er das so macht 😃 war mir aber nicht mehr so sicher. Danke

    Ich würde deine Frage mal in ein anderes Forum posten.
    http://entwickler-forum.de/forumdisplay.php?f=4

    Ich habe sehr gute Erfahrungen in diesem Forum bezüglich ADO.NET gemacht.

    (Du kannst ja auf diese Forum referenzieren.)

    Simon

    Ja ich dacht am anfang das es an mein Code liegt das ich irgendwas nicht berücksichtige oder so aber ich werd mich dort auch mal melden 🙂

    Danke an alle,

    ihr seit ne echte Hilfe 🙂



  • EDIT:

    Ich benutze MSSQL und muss es auch benutzen



  • Hab jetzt mal

    use master
    select * from sysprocesses
    

    getestet um zu gucken was für offene Verbindungen noch da sind und 2 Verbindungen sind von meinen Programm 🙄 heißt also das ich noch 2 Connection schließen muss 🙂 Danke für eure hilfe 😃



  • Ich würde so wenige Connections wie möglich verwenden. Mit einer kannst Du sogar mehrere Datasets gleichzeitig herunterholen (SQLCommand.Begin...).



  • Ok Problem gelöst-> Offene Connection geschlossen (Ausversehen vergessen :>) und läuft wieder und hab mich auch mal erkundig wieso weshalb warum als Antwort kam:

    Sql Server Express wurde mit absicht so Programmiert das es bei vielen offenen Connection langsamer wird damit der Benutzer den richtigen Sql Server kauft. Das ist Böse -> Microsoft ist Böse

    😡 Naja geht alles wie geplant danke an euch 🙂



  • Mmh, das halte ich dann schon für ein Stammtisch-Gerücht. Mehere Connections brauchen nun mal Resourcen und Rechenzeit, so ist es eben auch normal dass sie Performance druter leidet.


Anmelden zum Antworten