Office: (Office 2010) Performance verbessern

Helfe beim Thema Performance verbessern in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo. Ich versuche gerade meinen Code etwas zu "überarbeiten" dabei würde ich gerne solche Blöcke etwas performanter gestalten, weiß aber nicht so... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von u.gross, 20. Dezember 2016.

  1. Performance verbessern


    Hallo. Ich versuche gerade meinen Code etwas zu "überarbeiten" dabei würde ich gerne solche Blöcke etwas performanter gestalten, weiß aber nicht so recht wie ich das angehen soll. Kann mir jemand einen Tipp geben?

    Code:
    :)
     
  2. Moin,
    auf jeden Fall geht es kürzer *wink.gif* ,
    Code:
    und Textvergleiche sollten durch Fremdschlüssel ersetzt werden, z.B.:
    Code:
    ergibt dann:
    Code:
    Mit einem SQL-Select hättest du alle 8 Messungen auf einen Rutsch:
    Code:
    Was soll denn das überhaupt werden, was ist der Sinn der Übung?
    Was machst du später mit den ermittelten Werten?

    maike
     
  3. ok erstmal vielen dank ... auch wenn mir noch einiges davon unklar ist
    gleich mal zu deiner SQL Anweisung. Wie könnte ich denn die Variable StepNr und TpNr in die SQL Anweisung einbauen?

    Was ist der Vorteil wenn ich Textvergleich durch einen Fremdschlüssel ersetze? Nur damit ich es auch verstehe

    Und bei einem Fremdschlüssel müsste ich das dann zeilenweise angeben?
    also erst Messung = 1
    Dann den Code für die erste Messung

    Dann Messung = 2
    und dann den Code für die zweite Messung ?
     
  4. Performance verbessern

    Genau so, wie du das mit dem Dlookup auch machst. Du verkettest die Feldnamen und die Werte der Kriterien zu einem gültigen SQL-String.
    Unmittelbar ist der Vorteil nur gering. Ein numerischer Wert benötigt weniger Speicherplatz und kann daher von der DB-Engine schneller verarbeitet werden. Dies wirkt sich schon mehr aus, wenn die entsprechenden Felder noch indiziert werden.

    Der Kernpunkt dieses Hinweises ist IMO jedoch, dass deine Tabelle die Vermutung nahelegt, dass die Daten nicht vollständig Normalisiert sind.

    Genau das nicht.
    Besser wäre es, wenn du nicht jeden Messpunkt einzeln einliest, sondern die relevanten Messwerte aller Messpunkte mit einem einzigen SQL-Statement in ein Recordset holst und dann jeden Datensatz des Recordsets dem jeweiligen Messpunkt zuordnest. Das ist voraussichtlich knapp 10 mal so schnell, weil du anstelle von 10 Abfragen auf die DB nur noch eine einzige benötigst. Die Verarbeitung der 10 Ergebnisdatensätze ist vom (Rechen-)Zeitaufwand eher zu vernachlässigen.

    Die 10 Einzelwerte an die Prozedur zu übergeben, ist auch eher ungünstig für die Wartbarkeit deines VBA-Codes. Besser wäre es, eine geeignete Datenstruktur (Array, Collection, o.ä.) zu übergeben, die alle Werte aufnehmen kann. Auch ein Struct/Type oder eine Klasse wäre für die Datenübergabe an die konkrete Prozedur besser, verschiebt aber das Kernproblem vermutlich nur an eine andere Stelle.

    Um konkreter zu werden, wäre es erforderlich, mehr darüber zu wissen, was mit deinen Messwerten passiert, nachdem du sie gelesen hast.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  5. Daran hatte ich auch schon gedacht ... das einlesen der Werte in ein Recordset kann ich mir noch vorstellen, die Zuordnung jedoch nicht. Wie geschieht denn dann eine solche Zuordnung? Sorry wenn ich so viel frage :/

    An Arrays trau ich mich nicht ran. Hatte erst einmal was damit zu tun und musst mir da auch helfen lassen. Den Weg würde ich daher sehr ungern gehen.

    ich werde in einem folgenden Post mal versuchen die weiteren Schritte dazulegen.
     
  6. ich sende damit einen Befehlscode an ein Messgerät:

    Code:
     
  7. Michael Zimmermann schreibt:
    Performance-Tuning basiert i. d. R. nicht auf „geheimen“ High-Speed-Befehlen, sondern auf Mathematik: Wie viele Bytes werden bewegt, wie viele Schritte sind erforderlich, welche Zusatzkosten entstehen für RAM-Verwaltung, Prozessorbelastung, Plattenzugriffe.

    Ein DLookup ist eine vollständige Abfrage, die in VBA verpackt ist und die genau einen Wert holt. So eine einzelne Abfrageausführung und das Rundherum dazu kann schon etwas aufwändig sein. Für mehr als einen Wert ein DLookup-Dauerfeuer einzurichten ist nicht effizient. Du kämst sicher nicht auf den Gedanken und erst recht nicht zur Ausführung, bei 20 benötigten Flaschen Bier für einen Anlass nacheinander einzeln je eine Flasche aus dem Getränkemarkt zu holen (Treppe, Stadt, Ampeln, Markt, Kasse und zurück), sondern wenn Du schon mal da bist, nimmst Du gleich eine Kiste. Diese entspräche dem oben erwähnten Recordset für die Daten.

    Zweiter Gedanke: Den ganzen Haufen Messwerte auf einmal zu holen und dann per VBA 8 Suchen für Deine benötigten Werte auszuführen ist ein Weg. SQL kann aber schneller finden als VBA, und SQL kann Massendatenverarbeitung (alles auf einmal). Massendatenverarbeitung ist wiederum meistens schneller als alles einzeln hintereinander zu machen => mit einem Sieb kann man Steinchen von Sand einfacher und schneller trennen als mit zwei spitzen Fingern.
    Wenn also Deine Messungsarten selber in einer Tabelle abgelegt sind, könnte man diese Tabelle mit Deiner Datentabelle in einer Abfrage unmittelbar verknüpfen und gezielt nur die benötigten Messwerte ermitteln und per Recordset ausgeben.

    Was man dabei bemerkt: Gescheite Verarbeitungsmethoden erfordern auch gescheite Datenstrukturen, das schnelle SQL eben gut strukturierte Tabellen.
     
  8. Performance verbessern

    Ok, vergiss, was ich zur Übergabe an die Prozedur geschrieben habe. Das ist hier nicht relevant.

    Die Empfehlung SQL + ein Recordset statt zahlloser Dlookups zur Performanceverbesserung zu verwenden, ist allerdings noch viel effektiver als zuerst gedacht. Du kannst alle Dlookups mit einer einzigen Abfrage ersetzen.

    Darüber hinaus solltest du dich auch mal mit For-Next-Schliefen in VBA auseinandersetzen. Ich denke, dein gesposteter Code könnte auf insgesamt weniger als 30 Zeilen reduziert werden.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
  9. Schön wie du mir das mit dem Bier verdeutlicht hast ... das gefällt mir aus Bayern natürlich besonders gut :-)

    Ok das heißt ich löse das in etwa so?:
    Code:
     
  10. Wenn Du nur die Datensätze für diese beiden Zustände benötigst, dann ja.
    Recordsetschließen nicht vergessen.

    500 Jahre Reinheitsgebot muss man ja auch mal würdigen.
     
  11. Du weisst schon, dass das das erste Anti-Drogen-Gesetz in D ist? *cool.gif*
     
    Beaker s.a., 22. Dezember 2016
    #11
  12. Hallo
    als ich vor 40 Jahren mit EDV begonnen haben Hatten wir ein anderes Beispiel:
    Du musst so schnell als möglich von Bern nach Zürich (ca 100 Km) 10 Bette transportieren.
    Was nimmst Du Dein neuen Porsche oder Dein alten LKW *wink.gif*
     
    Lanz Rudolf, 22. Dezember 2016
    #12
  13. Performance verbessern

    Ganz schlechtes Beispiel: SQL würde ich nicht als alten LKW bezeichnen, und wenn Schweizer ein Auto mal richtig laufen lassen wollen, müssen sie schon rüberkommen auf eine deutsche Autobahn.
     
  14. Hallo
    Also nehmen wir Frankfurt Berlin
    ich sage nicht das SQL ein alter LKW ist
    nur das das Richtige Gefährt (Gefäss) gewählt werden Sollt !
    z.b Porsche 2* (1+Letze Fahrt) + 8* 100 km fahren muss
    LKW 2* (hin und zurück ) also 2 * 100 km
    da spielt es auch keine rolle wo auf der Welt das ist
     
    Lanz Rudolf, 22. Dezember 2016
    #14
  15. \@ Eberhard

    Ruedi hat das sicher anders gemeint ... er würde den Porsche nehmen, die Bretter sind nur 40cm lang und 10cm breit *grins

    er hat's schon gerade selbst erklärt, ich will das trotzdem loswerden *wink.gif*
     
    el_gomero, 22. Dezember 2016
    #15
Thema:

Performance verbessern

Die Seite wird geladen...
  1. Performance verbessern - Similar Threads - Performance verbessern

  2. Performance bei Ausführung Tabellenerstellungsabfrage

    in Microsoft Access Hilfe
    Performance bei Ausführung Tabellenerstellungsabfrage: Guten Tag miteinander. Ich habe eine Access-DB (.mdb) auf die ca 10 Leute zugreifen. Wenn ich zwischendrin mal ein oder zwei Tabellenerstellungsabfragen (für damit verknüpfte Brief-Vorlagen)...
  3. Schnellere Lösung als Index Vergleich gesucht um aus Zeileninfos Matrix zu bilden

    in Microsoft Excel Hilfe
    Schnellere Lösung als Index Vergleich gesucht um aus Zeileninfos Matrix zu bilden: Hallo ich habe folgenden Sachverhalt: Personaldaten und Veränderungen in Gehältern werden im Sheet 'Liste' in Listenform erfasst. Für jede Gehaltsänderung bekommt der jeweilige MA eine neue Zeile...
  4. Performance Probleme beim Makro

    in Microsoft Excel Hilfe
    Performance Probleme beim Makro: Hallo zusammen, ich habe mir folgendes kleines Programm gebastelt. Als "Laie" macht es zumindest was es soll... aber wenn es über 36 TSD Zeilen läuft, ist die Performance unterirdisch. Habt ihr...
  5. KPIs (Key Performance Indicators) in Power Pivot

    in Microsoft Excel Tutorials
    KPIs (Key Performance Indicators) in Power Pivot: KPIs (Key Performance Indicators) in Power Pivot Excel für Microsoft 365 Excel 2019 Excel 2016 Excel 2013 Mehr... Weniger...
  6. For Schleife, schlechte Performance

    in Microsoft Excel Hilfe
    For Schleife, schlechte Performance: Hallo zusammen, ich habe eine Tabelle mit 22.000 Ids, welche ich in einer 55.000 Zeilen großen Bestandstabelle Suche und bei Treffer einen Wert in einer Nachbarspalte überprüfe. Je nach...
  7. Wie Performance verbessern?

    in Microsoft Access Hilfe
    Wie Performance verbessern?: Hallo zusammen, ich hab meine Datenbank auf einem Netzwerkshare liegen. Jetzt stelle ich meinen Usern verschiedene individuelle Frontend Datenbanken zur Verfügung (Tabellen sind darin verknüpft)....
  8. einen BIS-Wert aus Tabelle auslesen

    in Microsoft Access Hilfe
    einen BIS-Wert aus Tabelle auslesen: Hallo zusammen, stehe wieder auf dem Schlauch.... :(. Folgendes Problem: In einer Abfrage habe ich eine Prozentwert. In einer Tabelle habe ich mehrer Prozentbereiche und einen...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden