Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

datagrid sehr langsam

Empfohlene Antworten

Veröffentlicht

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?

1,

aber das dgrid werd ich so oder so verwenden,w eil ich schon immense zeit da rein gesteckt habe

gibts für 1 was?

Ja, das DataGrid in Verbindung mit einer DataTable ;)

ich benutze bereits ein datatable...

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.

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

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

Was für eine DB benutzt Du? Sind die aktuellesten Versionen der DB und des DB-Treibers installiert? Verwendest Du OleDb oder ODBC?

postgres 8

odbc

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.

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

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.

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;

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.