AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zur Performance

Ein Thema von MechMac666 · begonnen am 1. Mär 2021 · letzter Beitrag vom 4. Mär 2021
Antwort Antwort
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#1

Frage zur Performance

  Alt 1. Mär 2021, 21:32
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
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: Frage zur Performance

  Alt 1. Mär 2021, 21:33
Keins von beiden.

Ich würde dafür vielleicht sogar ein TDictionary nehmen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: Frage zur Performance

  Alt 1. Mär 2021, 21:42
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> .
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Frage zur Performance

  Alt 1. Mär 2021, 21:57
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?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 1. Mär 2021 um 22:00 Uhr)
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#5

AW: Frage zur Performance

  Alt 1. Mär 2021, 22:10
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)

Geändert von MechMac666 ( 1. Mär 2021 um 22:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Frage zur Performance

  Alt 1. Mär 2021, 22:51
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).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Frage zur Performance

  Alt 2. Mär 2021, 10:10
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
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#8

AW: Frage zur Performance

  Alt 3. Mär 2021, 21:35
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Frage zur Performance

  Alt 4. Mär 2021, 04:16
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>;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 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