« BeginUpdate (role) » : différence entre les versions

De Wiki1000
(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. |} {...)
 
Aucun résumé des modifications
 
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

Dernière version du 8 janvier 2010 à 13:42

procedure BeginUpdate;

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

Pas de paramètre.
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