Si vous travaillez avec une grande liste (disons 1GB), elle doit être redimensionnée pour faire place à d'autres éléments. Est-il possible de lire/écrire dans cette liste alors que est en cours de redimensionnement, ou l'appel va-t-il être bloqué jusqu'à ce que l'opération soit terminée?Travailler avec une grande liste <T>
Répondre
Vous dites "1GB size" mais qu'est-ce que cela signifie réellement? Gardez à l'esprit que si vous travaillez avec un type de référence, tout ce qui sera dans la liste elle-même est un tas de références - donc la majeure partie de la mémoire occupée par "une liste et tous ses éléments" va être dans les éléments eux-mêmes, sauf si vous avez beaucoup de références en double. Maintenant, pour ce qui est de votre question elle-même, List<T>
n'est pas threadsafe. Vous ne devriez pas essayer de le lire pendant qu'il est modifié dans un autre thread. Si vous devez travailler avec une liste dans plusieurs threads, avec certains d'entre eux la modifiant, vous devez utiliser le verrouillage pour vous assurer qu'un seul thread y accède à temps (ou peut-être plusieurs threads en train de lire, mais pas d'écrire).
C'est ce que je pensais, mais je voulais m'assurer. Merci :) – Joe
Si vous travaillez avec une liste extrêmement volumineuse, je vous recommande fortement de pré-allouer de l'espace avant de l'utiliser afin d'éviter une croissance dynamique. Si vous prévoyez d'utiliser un concert, déterminez une capacité qui gère un peu plus d'un concert et créez la liste avec cette capacité. Cela devrait éliminer le besoin d'expansion et votre problème disparaîtra.
Si vous avez besoin de fonctionnalités simultanées dans vos listes, j'examinerais les extensions parallèles à .NET. Il existe des collections simultanées qui permettent un accès multi-thread. Je ne suis pas sûr qu'ils autorisent un accès simultané lors du redimensionnement, mais cela vaut le coup d'oeil. Les extensions parallèles seront également incluses dans .NET 4.0.
- 1. Conseils pour travailler dans une grande bibliothèque?
- 2. JComboBox avec une plus grande largeur de liste déroulante
- 3. Recherche rapide dans une grande liste avec jQuery
- 4. Liste <Base> avec Liste <Derived>
- 5. problèmes avec une grande DLL?
- 6. Sérialisation d'une très grande liste
- 7. recherche une liste <>
- 8. Travailler avec Nullable <'T> dans F #
- 9. Collections.emptyList() retourne une liste <Object>?
- 10. jQuery, meilleure façon de travailler avec <select>
- 11. Dictionnaire avec une liste <> comme TValue
- 12. web ui: Comment présenter une grande liste pour multi-select
- 13. Comment mélanger une liste <T>
- 14. Linq à entité avec une grande base de données
- 15. Travailler avec rss + C#
- 16. Syntaxe pour l'initialisation d'une liste <T> avec la liste existante Objets <T>
- 17. PL/SQL - Travailler avec une chaîne!
- 18. Travailler avec une base de données
- 19. Test pour la liste <T> appartenance à une liste <T>
- 20. Comment filtrer une liste fortement typée avec la liste <String> variables
- 21. Travailler avec DIV et CSS
- 22. CoreAnimation saccadé avec grande fenêtre
- 23. Travailler avec plusieurs XSD
- 24. Travailler avec des formulaires
- 25. Liste <? extends MyType>
- 26. Tri Liste <MyObject>
- 27. Cast de liste personnalisée filtrée <T> avec LINQ
- 28. Travailler autour pour MyS proc stocké retourner une liste de données problème
- 29. Reliure Telerik RadGrid à une liste <string> objet
- 30. Comment lier une liste <string> à ItemsControl?
Vous voulez dire que vous avez 250.000 articles dans la liste (32 bits), ou 125.000 articles dans la liste (64 bits), de types de référence, ou que vous avez X nombre d'articles dans la liste, où X est 1GB/(taille de l'article)? Ou voulez-vous dire que la taille totale de tous les éléments + la liste est de 1 Go? –