Delphi, quel est le moyen le plus rapide d'enregistrement de la méthode d'accès dans un TcxGrid ou TDataSet

StackOverflow https://stackoverflow.com/questions/4080196

  •  28-09-2019
  •  | 
  •  

Question

Je suis à l'aide de Delphi 2007 et le TcxGrid pour afficher le contenu d'un fichier de bibliothèque.La base de données des maisons de l'information sur le type de fichier, le nom, le chemin, et l'extension.

Dans les tests je suis de chargement 1700 enregistrements dans la grille par la TDataSet.J'ai aussi fais de la place dans la grille pour plus de 3 domaines qui doivent encore être calculé.Ils sont, si les fichiers n'existe, la taille du fichier et la date de modification.

Mon but est de montrer à l'utilisateur toutes les informations stockées (qui fonctionne très bien et c'est rapide), puis dans un thread d'arrière-plan trouver les informations pour les trois autres champs de données et les insérer dans le TcxGrid.Cette question a si peu rien à voir avec le filetage, je suis en train de faire.Son travail très bien.

Mon problème est que l'accès aux champs dans la grille qui est déjà construit, qui a un énorme ralentissement quand j'y accéder.J'ai essayé de deux façons différentes ...

  1. De la grille.DataController.Les valeurs de[RecordIndex,FieldIndex] - mais c'est une variante et je soupçonne que c'est pourquoi il est si lent

  2. De la grille.DataController.Jeu de données.FindFirst De la grille.DataController.Jeu de données.FindNext De la grille.DataController.Jeu de données.Champs[FieldIndex] Mais en utilisant cette "chercher" la méthode est aussi lente que la première méthode que j'ai essayé.Recherchez et moveby sont lent.

Tant de question bref, Quel est le moyen le plus rapide d'accéder à un dossier?

Était-ce utile?

La solution 3

La mise à jour de code nécessaire pour être à l'intérieur d'un début/fin de mise à jour a été mon gros problème.

Merci Lieven pour votre commentaire que c'était la solution à mon problème.Et merci Gad et Daniel pour les réponses que j'ai appris depuis.

Cela aurait été plus évident pour tout le monde j'ai eu plus de temps hier pour poster du code.

Autres conseils

Veuillez également indiquer si vous utilisez un TcxGridDBTableView ou TcxGridTableView?

Je pense que l'utilisation non-db conscient TcxGridTableView ou TcxBandedGridTableView avec

Vue.DataController.Les valeurs de[RecordIndex, FieldIndex] est le plus rapide.

Même si vous avez une base de données de l'application, vous pouvez charger le non-db version de la vue sur l'initialisation et de gérer DataController événements pour détecter des changements de données et les enjeux respectifs des commandes SQL pour mettre à jour la base de données.

Vous pouvez remplir la vue comme:

class procedure TForm1.FillView(const View: TcxGridBandedTableView; const Sql: string);
var
  Reader: TMyOrmDataReader;
  i: Integer;
begin
  Assert(Assigned(View), 'View is not assigned parameter.');
  with View.DataController do
  begin
    BeginFullUpdate;
    try
      Reader := TMyOrm.GetDataReader(SQL);
      try
        i := 0;
        RecordCount := 50 * 1000; // make it something big in order to avoid constant resizing by 1
        while Reader.Read do
        begin
          // Fill the view
         Values[i,  0] := Reader.GetInt32(0);
         Values[i,  1] := Reader.GetString(1);
         Inc(i);
        end;
        RecordCount := i - 1;
      finally
        Reader.Free;
      end;
    finally
      EndFullUpdate;
    end;
  end;
end;

Et puis d'accéder à des valeurs telles que:

View1.DataController.Values[View1.DataController.FocusedRecordIndex, View1Column1.Index].AsString

Vous pourriez travailler avec table/dataset première ajoutant les données manquantes et de montrer ensuite tous les champs datbound.

Je sais que c'est un vieux thread, mais je vais mentionner que la commutation de la grille à l'aide du Fournisseur de mode est une autre façon d'améliorer la vitesse de chargement, car il s'avère essentiel de la charge du réseau dans un virtuel opération.(Les données ne sont pas chargées jusqu'à ce qu'ils sont nécessaires pour l'affichage ou d'autres données d'accès.) Après cela, le DataController les caches, donc l'accès est très rapide une fois chargé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top