AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TInterlocked außerhalb eines TThreads?
Thema durchsuchen
Ansicht
Themen-Optionen

TInterlocked außerhalb eines TThreads?

Ein Thema von SneakyBagels · begonnen am 2. Jul 2017 · letzter Beitrag vom 2. Jul 2017
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.976 Beiträge
 
Delphi 12 Athens
 
#1

AW: TInterlocked außerhalb eines TThreads?

  Alt 2. Jul 2017, 23:19
statt inline verwende ich aber static (weil ich es damals so gefunden habe)
Das eine hat mit dem anderen nichts zu tun außer dass es beides der Performance dienlich ist. Mit inline sorgst du dafür, dass statt des Assemblerbefehls Call mit Parameterübergabe usw. der Quelltext der aufgerufenen Funktion direkt an der Stelle des Aufrufs eingebaut wird.
Mit static gibt es kleinste Optimierungen durch die Tatsache, dass EAX nicht als Self-Pointer benötigt wird. Das sind aber nur einzelne Assemblerbefehle, die wegfallen.

Bei größeren Funktionen bringt inline nicht mehr so viel, denn wenn eine Funktion z.B. nur 20 Assemblerbefehle enthält wie in diesem Fall bei IncTest usw. macht es schon einen Unterschied, ob noch 10 für den Methodenaufruf hinzukommen. Hat die Funktion 200 Zeilen Pascalcode (schon sehr viel übrigens, da schlägt jede Metrikanalyse für Quelltext Alarm), relativiert sich das, weil der Code für den Aufruf im Verhältnis zum Methodeninhalt sehr klein ist.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#2

AW: TInterlocked außerhalb eines TThreads?

  Alt 2. Jul 2017, 23:41
Wieso gibt es hier eigentlich noch keinen "Danke"-Button?

Zu deinem Code oben.
Ich habe es jetzt erst einmal vorläufig so gemacht:
Delphi-Quellcode:
// unit _globals.pas (vorläufig bleibt es bis Zeit habe und richtig umbaue)
type
 TTestRecord = packed record
  test, hallo, huhu: Int64;
 end;
var aTestRecord: TTestRecord;

// Unit _enums.pas (das ist weg)
// type
// TTestEnum = (test, hallo, huhu);

// unit log_utils.pas
procedure test(iTarget: Int64; iIncrement: Integer = 1);
begin
 TInterLocked.Add(iTarget, iIncrement);
end;

// unit... überall da wo ich es brauche
test(aTestRecord.hallo, 5);
test(aTestRecord.huhu);
Ist das trotzdem schon besser als vorher?

Geändert von SneakyBagels ( 3. Jul 2017 um 00:01 Uhr)
  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 23:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz