TStringList, tableau dynamique ou liste liée dans Delphi?

J'ai un choix.

J'ai un certain nombre de déjà commandé des chaînes que j'ai besoin de stocker et d'accéder. Il semble que j'ai peut choisir entre l'utilisation de:

  1. Un TStringList
  2. Un Tableau Dynamique de chaînes, et
  3. Une Liste de chaînes de caractères (individuellement liée)

    et Alan dans son commentaire m'a suggéré d'y ajouter également le choix:

  4. TList<string>

Dans quelles circonstances est-uns de ces meilleurs que les autres?

Qui est le mieux pour les petites listes (de moins de 10 articles)?

Qui est le mieux pour les grandes listes (plus de 1000 points)?

Qui est le mieux pour les listes énormes (plus de 1 000 000 postes)?

Qui est le mieux pour minimiser l'utilisation de la mémoire?

Qui est le mieux pour minimiser les temps de chargement afin d'y ajouter des éléments sur la fin?

Qui est le mieux pour minimiser les temps d'accès pour accéder à l'ensemble de la liste de la première à la dernière?

Sur cette base (ou autres), des données dont la structure serait-elle préférable?

Pour référence, je suis à l'aide de Delphi 2009.


Dimitry dans un commentaire dit:

Décrire votre tâche et schéma d'accès aux données, il sera possible de vous donner une réponse exacte

D'accord. J'ai un logiciel de généalogie avec beaucoup de données.

Pour chaque personne que j'ai un certain nombre d'événements et d'attributs. Je suis le stockage comme de simples chaînes de texte, mais il ya beaucoup d'entre eux pour chaque personne, allant de 0 à quelques centaines. Et j'ai des milliers de personnes. Je n'ai pas besoin d'un accès aléatoire. J'ai seulement besoin d'eux associé un certain nombre de chaînes de caractères dans un ordre connu attaché à chaque personne. C'est mon cas, des milliers de "petites listes". Ils prennent le temps de chargement et l'utilisation de la mémoire, et de prendre le temps d'accès si j'en ai besoin (par exemple pour exporter l'intégralité de rapport généré).

Alors j'ai un peu plus grosses listes, par exemple, tous les noms des sections de mon "virtuel" treeview, ce qui peut avoir des centaines de milliers de noms. De nouveau j'ai seulement besoin d'une liste que je peut accès par index. Ceux-ci sont stockés séparément à partir de l'arborescence pour plus d'efficacité, et le treeview récupère seulement si nécessaire. Cela prend un certain temps à charger et il est très coûteux de la mémoire d'une montre pour mon programme. Mais je n'ai pas à vous soucier du temps d'accès, parce que quelques-uns sont accessibles à la fois.

J'espère que cela vous donne une idée de ce que je suis en train d'accomplir.

p.s. J'ai posté beaucoup de questions au sujet de l'optimisation de Delphi ici à StackOverflow. Mon programme lit 25 MO de fichiers avec 100 000 personnes et crée des structures de données et un rapport et des treeview pour eux dans les 8 secondes, mais utilise 175 MO de RAM pour le faire. Je suis en train de travailler à réduire, parce que je suis visant à charger les fichiers avec plusieurs millions de personnes dans 32-bit de Windows.


J'ai juste trouvé quelques excellentes suggestions pour optimiser une TList à ce StackOverflow question:
Est-il plus rapide TList mise en œuvre?

source d'informationauteur lkessler