Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Frage zur Performance (https://www.delphipraxis.net/207175-frage-zur-performance.html)

MechMac666 1. Mär 2021 20:32

Frage zur Performance
 
Hallo,

ich arbeite sehr gerne mit zeichengetrennten Stringlisten als "Datenspeicher".

Wenn es nun auf Geschwindigkeit ankommt, was wäre eher vorzuziehen?
Eine TStringlist vom Aufbau:
Data1;Param1
Data2;Param2

oder ein Record vom Aufbau:
type test=record
Data:String;
Param:int64;
Und das Ganze als Array

DieDolly 1. Mär 2021 20:33

AW: Frage zur Performance
 
Keins von beiden.

Ich würde dafür vielleicht sogar ein TDictionary nehmen.

himitsu 1. Mär 2021 20:42

AW: Frage zur Performance
 
Die StringList kann man sortieren und auch den ValueNameSeparator auf ; einstellen.

Sortiert ist IndexOf schneller, aber leider hilft IndexOf nicht bei Zugriffen über [Name] und beim Zuweisen gibt es Probleme, denn der Values-Setter ist für sortierte Listen verboten.



Also ja, ein TDictionary<String,Int64> .

stahli 1. Mär 2021 20:57

AW: Frage zur Performance
 
Spielt die Reihenfolge der Einträge eine Rolle oder nicht?
Wenn nicht, würde Dich also dann nur der Wert zu einem Schlüssel interessieren?

MechMac666 1. Mär 2021 21:10

AW: Frage zur Performance
 
Ich sollte die Frage nicht allgemein, sondern bezogen auf meinen speziellen Fall richten.
Denn üblicher Weise kann es bei mir auch schon mal vorkommen
das aus den zwei Einträgen pro Datensatz 4 werden.
Ein Record oder eine Stringliste ist da sehr schnell drauf anzupassen.

Deswegen mein akuter Fall:
Hier spielt die Reihenfolge der Einträge keine Rolle und es bleibt bei zwei Einträgen pro Datensatz.
Jedoch muss die Liste so dann und wann verändert werden.
Sprich, es fallen Einträge raus oder es kommen neue hinzu.

EDIT
Allerdings wird der Key auch zeitweise leer sein. (Er ist nicht eindeutig)

stahli 1. Mär 2021 21:51

AW: Frage zur Performance
 
Schau Dir mal je nach Deiner Delphi-Version

TDictionary (wie oben empfohlen)

oder

eine "binäre Suche" für eine Liste an (der gesuchte Eintrag wird so schnell gefunden).

Mavarik 2. Mär 2021 09:10

AW: Frage zur Performance
 
Zitat:

Zitat von MechMac666 (Beitrag 1484207)
Allerdings wird der Key auch zeitweise leer sein. (Er ist nicht eindeutig)

OK, Key/Value-Paare bei dem der Key leer ist?

Vielleicht solltest Du und lieber mal erklären, wofür Du das verwendest oder was Du erreichen willst.

Mavarik

MechMac666 3. Mär 2021 20:35

AW: Frage zur Performance
 
Zitat:

Zitat von Mavarik (Beitrag 1484233)
Zitat:

Zitat von MechMac666 (Beitrag 1484207)
Allerdings wird der Key auch zeitweise leer sein. (Er ist nicht eindeutig)

OK, Key/Value-Paare bei dem der Key leer ist?
Vielleicht solltest Du und lieber mal erklären, wofür Du das verwendest oder was Du erreichen willst.
Mavarik

Eine serverseitige Benutzerregistrierung.
Wenn der Benutzer sich verbindet, ist zunächst nur seine unique ID bekannt.
Erst wenn er sich einloggt, wird dazu der Name ergänzt. Solange gilt er als "unbekannt" mit eingeschränkten Rechten.

Mavarik 4. Mär 2021 03:16

AW: Frage zur Performance
 
Zitat:

Zitat von MechMac666 (Beitrag 1484364)
Eine serverseitige Benutzerregistrierung.
Wenn der Benutzer sich verbindet, ist zunächst nur seine unique ID bekannt.
Erst wenn er sich einloggt, wird dazu der Name ergänzt. Solange gilt er als "unbekannt" mit eingeschränkten Rechten.

Naja ok... Das ist eher eine Sache für eine Datenbank...

ID, UniqueID, Name, More;Key UniqueID,Key Name

oder mit 2 Dictionary...

Delphi-Quellcode:
PUser = ^TUser;
TUser = Record
  UniqueID : TGUID;
  Name    : String;
  More    : TWhatever;
end;

SearchID : TDictionary<String,PUser>;
SearchName : TDictionary<String,PUser>;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz