vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Doppeleintragungen sortieren 
Autor: Preisser
Datum: 14.10.10 17:27

Hallo,
konnte meinen Beitrag leider nicht mehr editieren.

Ich hab jetzt mal einen Test der Geschwindigkeit zwischen Access-DB und VB6-UDTs gemacht. Als Datensatz verwendete ich folgende Struktur:
Public Type MyPersDatensatz
    StrFeld1 As String
    StrFeld2 As String
    StrFeld3 As String
    StrFeld4 As String
    LngFeld1 As Long
End Type
 
Public PersDatensatzArr() As MyPersDatensatz
Public PersDatensatzIdxArr() As Long
Public PersDatensatzArrCount As Long
Also ein Datensatz mit 4 Strings und einer Zahl.
Das zugehörige Array fülle ich mit 30000 Datensätzen, deren Inhalte zufällig generiert werden (Strings mit einer Länge zwischen 9 und 12 Zeichen).

Danach erstelle ich weitere 100 zufällige Datensätze, die in die Tabelle eingetragen werden sollen, aber nur, wenn kein Duplikat dieses Datensatzes in der Tabelle vorhanden ist. Das heißt, ich überprüfe vor jedem Hinzufügen des Datensatzes ins Array, ob es schon einen Datensatz mit den gleichen Daten gibt.

Hierzu wird eine binäre Suche und eine Indirektion über das PersDatensatzIdxArr-Array verwendet. Der Zugriff PersDatensatzArr(i) liefert das i-te Element in der Reihenfolge, in der die Elemente hinzugefügt wurden. Im Array PersDatensatzIdxArr werden die Indizes so gepeichert, dass die Datensätze einem bestimmten Sortierkriterium genügen.
PersDatensatzArrCount gibt die Anzahl an Datensätzen an (LBound: 0, RBound: PersDatensatzArrCount - 1).
Die Arrays haben eine Anfangsgröße von 500 und werden jeweils um 100 Einträge vergrößert, wenn mehr Datensätze benötigt werden.

Das Gleiche hab ich dann mit einer Access 2003-DB gemacht. Zuerst 30000 zufällige Datensätze hinzugefügt, dann nochmal 100 generiert, welche nur hinzugefügt wurden, wenn nicht bereits ein gleicher Datensatz in der DB vorhanden ist. Dazu hab ich bei jedem Datensatz ein SELECT-Statement benutzt, welches in der WHERE-Klausel die Werte enthält, und nur einen Eintrag hinzugefügt, wenn die Abfrage ein leeres Resultset lieferte (könnte man natürlich auch noch optimieren).


Zeitdauer bei Array aus UDTs: 110 ms
Zeitdauer bei Access 2003-DB: 3016 ms!
Allerdings waren hier die Felder nicht indiziert. Wenn man alle Felder indiziert (was zusätzlichen Speicherplatz benötigt), dauerte es mit einer Access-DB auch nur noch 150 ms.

Die Variante über ein Array aus UDTs war hier beim Suchen von Duplikaten also schneller als die Verwendung einer Access-DB. Allerdings braucht das dann natürlich entsprechend RAM (ca. 3 MB bei 30.000 Datensätzen mit Strings aus 9-12 Zeichen), und mit einer DB hat man tatsächlich auch mehr Möglichkeiten (z.B. Sortierung).


Den verwendeten Code konnte ich leider nicht mehr mit hinzufügen, da sonst die Nachricht zu lang wäre (falls das jemand intressiert, kann ich ihn ja noch schreiben).

Beitrag wurde zuletzt am 14.10.10 um 17:57:13 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Doppeleintragungen sortieren2.503dj.tommy11.10.10 20:21
Re: Doppeleintragungen sortieren1.763Blackbox11.10.10 20:26
Re: Doppeleintragungen sortieren1.767dj.tommy11.10.10 20:42
Re: Doppeleintragungen sortieren1.765Blackbox11.10.10 20:52
Re: Doppeleintragungen sortieren1.737dj.tommy11.10.10 21:45
Re: Doppeleintragungen sortieren1.737Franki12.10.10 02:08
Re: Doppeleintragungen sortieren1.897dj.tommy12.10.10 13:55
Re: Doppeleintragungen sortieren1.734Dirk12.10.10 17:14
Re: Doppeleintragungen sortieren1.730Blackbox12.10.10 18:31
Re: Doppeleintragungen sortieren1.718Franki13.10.10 02:39
Re: Doppeleintragungen sortieren1.737Franki13.10.10 02:34
Re: Doppeleintragungen sortieren1.809Preisser13.10.10 12:39
Re: Doppeleintragungen sortieren1.742Franki14.10.10 05:08
Re: Doppeleintragungen sortieren1.767Preisser14.10.10 12:05
Re: Doppeleintragungen sortieren1.709Preisser14.10.10 17:27
Re: Doppeleintragungen sortieren1.721dj.tommy18.10.10 18:36
Re: Doppeleintragungen sortieren1.795Preisser19.10.10 17:38
Re: Doppeleintragungen sortieren1.695dj.tommy19.10.10 17:49
Re: Doppeleintragungen sortieren1.776wb-soft11.10.10 21:22

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel