Je veux stocker un grand ensemble de résultats 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. Quelle est la meilleure façon de mettre en œuvre cela? Je pensais garder les compensations dans une table séparée et stocker tous les enregistrements consécutivement? Est-ce étrange? (Langage de programmation: Delphi)Quelle est la meilleure façon d'implémenter des tableaux de longueur variable?
Répondre
Je ne suis pas certaine de vous suivre totalement, mais jetez un coup d'œil à TList. Dans Delphi 7 au moins, il est implémenté comme une artere de pointeurs. Vous pouvez utiliser la propriété capacity pour pré-allouer la liste à l'avance si vous savez combien de résultats reviennent.
La liste va augmenter automatiquement si elle manque d'espace. La croissance dépend de la taille de la liste. Jetez un oeil à la source de l'unité de classes pour voir ce qu'il fait. Editer: Toujours dans D2009, le support générique a été ajouté à TList, ce qui le rend un peu plus agréable à utiliser.
Le meilleur moyen est probablement de contenir un tableau de pointeurs vers des enregistrements. Dans ce cas, vous n'aurez pas à faire de compensation, et les recherches seront à temps constant.
Recherches serait toujours temps constant avec la proposition du questionneur. –
J'utiliserais TList et stocker des pointeurs sur votre enregistrement.
type
pMyRecord : ^TMyRecord;
...
...
...
var
p : pMyRecord;
...
...
New(p);
with p^ do
begin
...
...
end;
...
MyList.Add(P);
Pourquoi ne pas utiliser une version mémoire de votre base de données? La plupart ont un moyen de conserver une table complète en mémoire, impliquant généralement le mot-clé SQL MEMORY. Vous copieriez la table à partir du disque vers la table de mémoire, puis pourrez 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 ce jeu de résultats?
- 1. Quelle est la meilleure façon de créer des déploiements ClickOnce
- 2. Quelle est la meilleure façon de couper une chaîne en morceaux d'une longueur donnée dans Ruby?
- 3. Quelle est la meilleure façon d'initialiser un tableau sur un tableau de longueur fixe? (C++/CLI)
- 4. Quelle est la meilleure façon de ReadLine par Expression Tree?
- 5. Quelle est la meilleure façon de faire ce programme Java?
- 6. quelle est la meilleure façon de marquer un texte?
- 7. Quelle est la meilleure façon de lire les données CSV?
- 8. Quelle est la meilleure façon de gérer les exceptions ObjectDataSource?
- 9. Quelle est la meilleure façon de trouver l'inverse de datetime.isocalendar()?
- 10. Quelle est la meilleure façon de commencer avec NHibernate?
- 11. Quelle est la meilleure façon de localiser un IEnumerable?
- 12. Quelle est la meilleure façon de lire GetResponseStream()?
- 13. Quelle est la meilleure façon de déboguer un Oracle SP?
- 14. Quelle est la meilleure façon de diviser deux objets TimeSpan?
- 15. Quelle est la meilleure façon de tester les services WCF?
- 16. Quelle est la meilleure façon d'exposer l'API de mon serveur?
- 17. Quelle est la meilleure façon de formater C# dans WordPress?
- 18. Quelle est la meilleure façon de trier par date?
- 19. Quelle est la meilleure façon de structurer un projet?
- 20. Quelle est la meilleure façon de chiffrer un clob?
- 21. Quelle est la meilleure façon de gunzip fichiers avec Perl?
- 22. Quelle est la meilleure façon de rafraîchir un indice Nutch?
- 23. Quelle est la meilleure façon de démarrer avec Open Source?
- 24. Quelle est la meilleure façon d'effacer un tableau de chaînes?
- 25. Quelle est la meilleure façon de déboguer un écrasement explorer.exe?
- 26. Quelle est la meilleure façon de vider un répertoire?
- 27. Quelle est la meilleure façon de dupliquer fork() dans Windows?
- 28. Quelle est la meilleure façon de commencer à utiliser Mylyn?
- 29. Quelle est la meilleure façon de différencier Crystal Reports?
- 30. Quelle est la meilleure façon d'automatiser le remplacement de texte?
Il est utile de savoir quel langage de programmation vous envisagez d'utiliser, avec des questions comme celle-ci. – unwind