AGB  ·  Datenschutz  ·  Impressum  







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

Move innerhalb von TBytes

Ein Thema von Benmik · begonnen am 15. Okt 2020 · letzter Beitrag vom 16. Okt 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#1

Move innerhalb von TBytes

  Alt 15. Okt 2020, 13:55
Folgende Situation:
TB:TBytes mit 1000 Bytes. Jetzt dieser Code:
Delphi-Quellcode:
Move(TB[200],TB[0],800;
SetLength(TB,800);
Funktionieren tut es. Ist das sinnvoll? Sollte man über eine Temp-Variable gehen? Wobei wird am wenigsten Aufwand betrieben (umkopieren etc.)?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 14:05
Würde ich mir jetzt keine Gedanken machen und einfach Delete aufrufen. Das funktioniert auch mit anderen Array-Typen.

  Delete(TB, 0, 200);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#3

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 14:16
Tatsächlich so einfach? Ich hatte schwer rumgesucht und war unter anderem auf diesen Beitrag gestoßen (OK, FreePascal, aber immerhin von 2017; geht das in Delphi und in FreePascal nicht?).
Egal, das ist ja schön, danke.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 15:11
Joar, aber erschreckender Weise wurden diese string-like Array-Operatoren erst im Delphi 10.1 eingeführt, wenn ich mich nicht irre.
+ , Insert und Delete ... Copy ging schon vorher

http://docwiki.embarcadero.com/RADSt...pport_Routines
https://www.embarcadero.com/products/delphi/whats-new
https://www.delphipraxis.net/198002-...-loeschen.html


Über die Record-Operatoren könnte man sich sowas aber auch schon früher selbst bauen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (15. Okt 2020 um 15:31 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#5

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 16:01
Ich benutze noch teilweise selbstgebaute, mit Move und Pointern ...
aber möchte auch generell auf die "Neuen" umstelllen.

Gibt es vielleicht irgendwo einen Benchmark zu den String-Like Funktionen ?
Wäre gut mal zu sehen wie performant die wirklich sind.
(Bei Delphi hatte ich schon öfters mal zu hohe Erwartungen )
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#6

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 16:26
string.Join ?! Ich glaub's nicht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 16:30
Zu cool um wahr zu sein?

http://docwiki.embarcadero.com/Libra...Helper_Methods


Und nee, nicht getestet.
Aber bis auf Ausnahmen versuche ich die Standardfunktionen zu verwenden, bevor ich eigenes Einbau. (weniger eigener Code = theoretisch weniger Fehler)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 16:56
Gibt es vielleicht irgendwo einen Benchmark zu den String-Like Funktionen ?
Wäre gut mal zu sehen wie performant die wirklich sind.
Wegen des generellen Overheads, den diese Funktionen ja haben müssen, um alle Anwendungsfälle abzudecken, ist die Performance im vorliegenden Fall sicher nicht besser als das gezeigte Move und SetLength. Am Ende tut die interne Routine auch nichts anderes. (Wer sich das selbst ansehen möchte wird bei _DynArrayDelete in System.pas fündig)

Ich finde aber, hier überwiegt Lesbarkeit und Wartbarkeit. Sollte es wirklich zu Performance-Problemen kommen, kann man ja immer noch auf den nativen Ansatz zurückgreifen. Aber eben auch nur dann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#9

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 17:21
Hab ich erst vor zwei Tagen durchgesehen und Join völlig übersehen. Wo wir dabei sind, was ist eigentlich der Unterschied zwischen Parse und ToInteger?
Wer sich das selbst ansehen möchte wird bei _DynArrayDelete in System.pas fündig
Hatte ich nicht lokalisieren können. Sind ja mehr als 2 Zeilen, aber deine Sicht ist sicher richtig. Ich hatte in meinem Code noch eigens einen Kommentar dazu geschrieben, was da eigentlich geschieht, weil das Move deutlich unübersichtlicher war als im gezeigten Beispiel; das kann ich mir jetzt sparen und das allein ist es schon wert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: Move innerhalb von TBytes

  Alt 15. Okt 2020, 17:58
was ist eigentlich der Unterschied zwischen Parse und ToInteger?
Funktionell offenbar keiner. Existiert vielleicht nur aus Symmetriegründen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:25 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