Zum Inhalt springen

datagrid sehr langsam


Empfohlene Beiträge

Geschrieben

ich nutze ein dgrid mit einem recorset

recordset ist veraltet, ich weis;

die frage ist nun: liegt es am recordset oder am dgrid, dass alles so langsam ist;

der select selbst benötigt keine 2 sekunden;

welche alternativen gibt es zum recordset?

Geschrieben
ich nutze ein dgrid mit einem recorset

recordset ist veraltet, ich weis;

die frage ist nun: liegt es am recordset oder am dgrid, dass alles so langsam ist;

der select selbst benötigt keine 2 sekunden;

welche alternativen gibt es zum recordset?

Hi,

wieviele Datensätze zeigst du denn an? Wäre für den Kunden ein datagrid mit Paging eine Option? Im Datagrid wird SEHR viel Müll in den Viewstate geschrieben, da kann man händisch noch recht viel optimieren. Der HTML-code für eine Spalte könnte auch helfen, um Performanceprobleme aufzudecken. Hast du noch zusätzliche SQL Abfragen oder viel code im DataItemBound?

s.

Geschrieben

so sieht mein datenladen aus;

im beispiel benötigt ein select für ca. 400 datensätze in der db ~ 400 ms, in vb ~ 13 sekunden

    Private dt As DataTable = New DataTable("Kriterien")

    Friend WithEvents mDataSet As DataSet

    Private dgTS As DataGridTableStyle = New DataGridTableStyle


    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Dim dcFallID As DataColumn = New DataColumn("FallID")

        Dim dcBezeichnung As DataColumn = New DataColumn("Bezeichnung")

        Dim dcFallArt As DataColumn = New DataColumn("Art")

        Dim dcFallKategorie As DataColumn = New DataColumn("Kategorie")

        Dim dcProjekt As DataColumn = New DataColumn("Projekt")

        Dim dcStatus As DataColumn = New DataColumn("Status")

        Dim dcPrio As DataColumn = New DataColumn("Prio")

        Dim dcAnlagedatum As DataColumn = New DataColumn("Anlagedatum")

        Dim dcWunschtermin As DataColumn = New DataColumn("Wunschtermin")

        Dim dcIstStart As DataColumn = New DataColumn("IstStart")

        Dim dcIstEnde As DataColumn = New DataColumn("IstEnde")

        Dim dcAnleger As DataColumn = New DataColumn("Anleger")

        Dim dcDelegiertAn As DataColumn = New DataColumn("Delegiert An")


        dcAnlagedatum.DataType = System.Type.GetType("System.DateTime")

        dcWunschtermin.DataType = System.Type.GetType("System.DateTime")

        dcIstStart.DataType = System.Type.GetType("System.DateTime")

        dcIstEnde.DataType = System.Type.GetType("System.DateTime")


        mDataSet = New DataSet("newDataSet")

        dt.Columns.AddRange(New DataColumn() {dcFallID, _

                                              dcBezeichnung, _

                                              dcFallArt, _

                                              dcFallKategorie, _

                                              dcProjekt, _

                                              dcStatus, _

                                              dcPrio, _

                                              dcAnlagedatum, _

                                              dcWunschtermin, _

                                              dcIstStart, _

                                              dcIstEnde, _

                                              dcAnleger, _

                                              dcDelegiertAn})


        mDataSet.Tables.Add(dt)


        Dim sSql As String

        Dim oRs As New ADODB.Recordset

        Dim newRow As DataRow

        Dim iZeile As Integer


        sSql = " select * from vloadadmin "


        oRs.Open(sSql, oConn)

        If Not oRs.EOF Then

            dgTS.MappingName = "Kriterien"

            DataGrid1.TableStyles.Add(dgTS)

            DataGrid1.TableStyles("Kriterien").AlternatingBackColor = Color.LightGoldenrodYellow

            While Not oRs.EOF

                newRow = dt.NewRow

                dt.Rows.Add(newRow)

                dt.Rows(iZeile)("FallID") = oStdFct.vCheckNull(oRs(0).Value)

                dt.Rows(iZeile)("Bezeichnung") = oStdFct.vCheckNull(oRs(1).Value)

                dt.Rows(iZeile)("Art") = oStdFct.vTranslateFallArt(oRs(2).Value)

                dt.Rows(iZeile)("Kategorie") = oStdFct.vTranslateFallKategorie(oRs(3).Value)

                dt.Rows(iZeile)("Projekt") = oStdFct.vTranslateProjekt(oRs(4).Value)

                dt.Rows(iZeile)("Status") = oStdFct.vTranslateStatus(oRs(5).Value)

                dt.Rows(iZeile)("Prio") = oRs(13).Value & " - " & oStdFct.vTranslatePrio(oRs(13).Value)

                dt.Rows(iZeile)("IstStart") = oStdFct.vCheckDate(oStdFct.vCheckNull(oRs(6).Value))

                dt.Rows(iZeile)("IstEnde") = oStdFct.vCheckDate(oStdFct.vCheckNull(oRs(7).Value))

                dt.Rows(iZeile)("Anlagedatum") = oStdFct.vCheckDate(oStdFct.vCheckNull(oRs(14).Value))

                dt.Rows(iZeile)("Wunschtermin") = oStdFct.vCheckDate(oStdFct.vCheckNull(oRs(11).Value))

                dt.Rows(iZeile)("Anleger") = oStdFct.vTranslateUser(oStdFct.vCheckNullUser(oRs(15).Value))

                dt.Rows(iZeile)("Delegiert An") = oStdFct.vTranslateUser(oStdFct.vCheckNullUser(oRs(16).Value))

                oRs.MoveNext()


                iZeile = iZeile + 1


            End While

        End If

        oRs.Close()


        DataGrid1.DataSource = dt


        Exit Sub


    End Sub

Geschrieben

folgendes noch:

oRs.Open(sSql, oConn)
benötigt ca. 7 sekunden
If Not oRs.EOF Then

      While Not oRs.EOF


      End While

End If

benötigt ca. 6 sekunden

Geschrieben

Hast Du Bei Dir Access auf dem Rechner? Wenn ja, leg mal eine neue Access Datenbank mit einer einzigen, leeren Tabelle an und versuch Dich mal mit dieser zu verbinden um raus zu bekommen obs an der DB liegt.

Im Normalfall ist OleDB zwar langsamer als ODBC, aber verushc trotzdem mal ob Du mit OleDb schneller auf die posgre DB kommst.

Geschrieben

ne, an der db liegts sicher nicht und an der version auch nicht!

wie gesagt, habe ich einen 7 sekunden delay, wenn ich das rs öffne, und weitere 6 sekunden, wenn ich das dt fülle;

warum sollte es also an der db liegen, wenn ich z.b. die daten beim befüllen ja schon habe (aber es 6 sekunden dauert)

muss wohl wo anders weitersuchen

Geschrieben

Ganz einfach, weil Du ein Recordset benutzt und die Daten eben nicht beim Befüllen schon hast ;) Das RS lässt meines wissens nach solange die Verbindung offen, bis Du es schließt. Und Da es veraltet ist würd ich es an Deiner stelle eh durhc einen DataReader ersetzebn, den steuerst Du genauso.

Geschrieben

ne;

es lag am odbc treiber;

es gab noch einen, der 2 monate danach rausgekommen ist, mit dem öffnet sich das rs sofort;

da ich das datenladen etwas anders gemacht habe, dauert das halt noch ein wenig, dass alles aber auf odbcdataadapter umzustellen wär zu aufwendig;

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...