BeginUpdate (role)

De Wiki1000
(Différences entre les versions)
(Nouvelle page : <source lang='delphi'>procedure BeginUpdate;</source> Cette procédure indique le début d'un ensemble d'opérations dans le rôle. {|class="wikitable" |- |Pas de paramètre. |} {...)
 
 
Ligne 13 : Ligne 13 :
 
Exemple
 
Exemple
 
<source lang='delphi'>
 
<source lang='delphi'>
 +
var inst:WFClasseC; idx:Integer; t1,t2,t3:longint;
 
begin
 
begin
   MyRole.BeginUpdate;
+
   WFClasseCList.BeginUpdate;
 
   try
 
   try
  ...
+
    t1 := GetTickCount;
 +
    ClassManager.BeginLongTran(100,'WFClasseC');
 +
    ClassManager.TranAutoBatch := True;
 +
    try
 +
      for idx:=0 to ACount-1 do
 +
      begin
 +
        inst := WFClasseC.Create;
 +
        inst.oidWFClasseARef := OID;
 +
        inst.uneChaine := uneChaine +'-'+ inttostr(idx);
 +
      end;
 +
    t2 := GetTickCount;
 +
    ClassManager.CommitLongTran;
 +
    t3 := GetTickCount;
 +
    ShowMessage(Format('batch:%d loop:%s commit:%s',[
 +
                  ClassManager.TranBatchCount,
 +
                  TickToString(t2-t1),
 +
                  TickTostring(t3-t2)]));
 +
    except
 +
    ClassManager.RollBackLongTran;
 +
    raise;
 +
    end;
 
   finally
 
   finally
   MyRole.EndUpdate;
+
   WFClasseCList.EndUpdate;
 
   end;
 
   end;
 
end;
 
end;
 
</source>
 
</source>
 +
 +
Résultat de l'exécution lorsque le code est appelé d'une interface affichant une grille sur le rôle liste (Création de 110 objets) :
 +
* Sans BeginUpdate/EndUpdate : 216757 ms
 +
* Avec BeginUpdate/EndUpdate : 180 ms
  
 
Voir aussi
 
Voir aussi

Version actuelle en date du 8 janvier 2010 à 14:42

procedure BeginUpdate;

Cette procédure indique le début d'un ensemble d'opérations dans le rôle.

Pas de paramètre.
Info-20px.png Note : A l'intérieur d'un bloc BeginUpdate / EndUpdate les évènements de notification du rôle sont désactivés et enregistrés, à la fin de l'actualisation un évènement de chaque type enregistré sera émis.


Exemple

var inst:WFClasseC; idx:Integer; t1,t2,t3:longint;
begin
  WFClasseCList.BeginUpdate;
  try
    t1 := GetTickCount;
    ClassManager.BeginLongTran(100,'WFClasseC');
    ClassManager.TranAutoBatch := True;
    try
      for idx:=0 to ACount-1 do
       begin
         inst := WFClasseC.Create;
         inst.oidWFClasseARef := OID;
         inst.uneChaine := uneChaine +'-'+ inttostr(idx);
       end;
    t2 := GetTickCount;
    ClassManager.CommitLongTran;
    t3 := GetTickCount;
    ShowMessage(Format('batch:%d loop:%s commit:%s',[
                   ClassManager.TranBatchCount,
                   TickToString(t2-t1),
                   TickTostring(t3-t2)]));
    except
    ClassManager.RollBackLongTran;
    raise;
    end;
  finally
  WFClasseCList.EndUpdate;
  end;
end;

Résultat de l'exécution lorsque le code est appelé d'une interface affichant une grille sur le rôle liste (Création de 110 objets) :

  • Sans BeginUpdate/EndUpdate : 216757 ms
  • Avec BeginUpdate/EndUpdate : 180 ms

Voir aussi

Rôles (tech)Développement DSM

Outils personnels