AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Form laden: Localizeloading in InitHeritedcomponent

Form laden: Localizeloading in InitHeritedcomponent

Ein Thema von Harry Stahl · begonnen am 10. Jun 2018 · letzter Beitrag vom 10. Jun 2018
 
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#1

Form laden: Localizeloading in InitHeritedcomponent

  Alt 10. Jun 2018, 12:09
Ich habe hier ein FMX-Project, wo das Laden der Mainform ca. 6-7 Sekunden dauert (ist aber erst seit einiger Zeit so).

Wenn ich per Debugging nach Application.Run durch den Code gehe, ist es der Aufruf in "InitInheritedComponent" (aus System.Classes) und zwar der Aufruf von der Procedure "NotifyGlobalLoading".

Ich verstehe dabei nicht so ganz, wie der Booleanwert für "LocalizeLoading" gesetzt wird oder ob man das irgendwie beeinflussen kann (so dass LocalizeLoading false ist und NotifiyGlobalLoading nicht aufgerufen werden muss).

Jemand eine Idee?

Delphi-Quellcode:
function InitInheritedComponent(Instance: TComponent; RootAncestor: TClass): Boolean;

  function InitComponent(ClassType: TClass): Boolean;
  begin
    Result := False;
    if (ClassType = TComponent) or (ClassType = RootAncestor) then Exit;
    Result := InitComponent(ClassType.ClassParent);
    Result := InternalReadComponentRes(ClassType.ClassName,
      FindResourceHInstance(FindClassHInstance(ClassType)), Instance) or Result;
  end;

var
  LocalizeLoading: Boolean;
begin
  GlobalNameSpace.BeginWrite; // hold lock across all ancestor loads (performance)
  try
    LocalizeLoading := (Instance.ComponentState * [csInline, csLoading]) = [];
    if LocalizeLoading then BeginGlobalLoading; // push new loadlist onto stack
    try
      Result := InitComponent(Instance.ClassType);
      if Result then Instance.ReadDeltaState;
      if LocalizeLoading then NotifyGlobalLoading; // < ---- call Loaded [das brauch Zeit!!]
    finally
      if LocalizeLoading then EndGlobalLoading; // pop loadlist off stack
    end;
  finally
    GlobalNameSpace.EndWrite;
  end;
end;
NotifyGloballoading sieht so aus:

Delphi-Quellcode:
procedure NotifyGlobalLoading;
var
  I: Integer;
  G: TList<TComponent>;
begin
  G := GlobalLoaded; // performance: eliminate repeated trips through TLS lookup
  for I := 0 to G.Count - 1 do
    TComponent(G[I]).Loaded;
end;

Geändert von Harry Stahl (10. Jun 2018 um 12:14 Uhr)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:38 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