Question

Je souhaite stocker un ensemble de résultats volumineux de la base de données en mémoire. Chaque enregistrement a une longueur variable et le temps d'accès doit être aussi rapide que les tableaux. Quel est le meilleur moyen de mettre cela en œuvre? Je pensais garder des décalages dans une table séparée et stocker tous les enregistrements de manière consécutive? Est-ce étrange? (Langage de programmation: Delphi)

Était-ce utile?

La solution

Je ne suis pas certain de vous suivre totalement, mais jetez un coup d'œil à TList.

Dans Delphi 7 au moins, il est implémenté comme un arary de pointeurs. Vous pouvez utiliser la propriété de capacité pour préallouer la liste à l'avance si vous savez combien de résultats sont renvoyés.

La liste s'agrandira automatiquement si elle manque d'espace. Cela dépend de la taille de la liste.

Jetez un coup d'œil à la source de l'unité de classes pour voir ce qu'elle fait.

Éditer: dans D2009 également, un support Genric a été ajouté à TList, ce qui le rend un peu plus agréable à utiliser.

Autres conseils

Le meilleur moyen est probablement de contenir un tableau de pointeurs sur les enregistrements. Dans ce cas, vous n'aurez pas à vous soucier des compensations et les recherches seront constantes dans le temps.

Pourquoi ne pas utiliser une version MEMORY de votre base de données? La plupart ont un moyen de garder une table complète en mémoire, impliquant généralement le mot clé SQL MEMORY. Vous pouvez copier la table du disque vers la table de mémoire, puis utiliser toutes les opérations de base de données normales à la vitesse de la mémoire. Je sais que cela fonctionne bien dans DBISAM.

Après mj2008 , vous pouvez utiliser un TCLientDataset au lieu d'un tableau d'enregistrements. Quelle est la taille de cet ensemble de résultats?

Je voudrais utiliser TList et stocker les pointeurs sur votre dossier.

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top