Dans .NET 3.5, WeakReference fonctionne-t-il avec String ou dois-je l'envelopper dans une petite "classe" pour qu'il fonctionne avec?Est-ce que WeakReference fonctionne avec String?
Répondre
System.String
(string
en C#) est un type de référence, donc il n'y a aucune raison pour que cela ne fonctionne pas correctement avec WeakReference
. Ignorez le fait qu'il s'agit en quelque sorte d'un type de référence spécial (immuable, pour commencer) - le CLR le voit comme un type de référence. En disant cela, this other StackOverflow thread fait un bon point que les références de chaîne peuvent être «internées» dans de nombreuses situations, et donc le comportement «attendu» en ce qui concerne la récupération de place n'est pas observé.
Cela fonctionnera sans aucun doute avec WeakReference sans aucun problème car System.String est un type de référence simple. Il serait intéressant de voir votre cas d'utilisation d'un WeakReference car il ne semble pas correspondre aux utilisations "normales" de WeakReference.
De l'MSDN Guidelines:
Utiliser des références longues faibles que lorsque cela est nécessaire que l'état de l'objet est imprévisible après la finalisation.
Évitez d'utiliser des références faibles aux petits objets car le pointeur lui-même peut être aussi grand ou plus grand. Évitez d'utiliser des références faibles comme solution automatique aux problèmes de gestion de la mémoire. Au lieu de cela, développez une stratégie de mise en cache efficace pour gérer les objets de votre application.
Mon cas est que j'ai tellement de chaînes, normalement ils sont stockés dans DB et je veux seulement les libérer quand je suis à court de mémoire. En fait, une meilleure mise en cache serait préférable, mais je n'ai trouvé aucun moyen de libérer le cache lorsque la mémoire est faible. –
Je m'attendrais à ce que le garbage collector fonctionne comme prévu et nettoie les références aux chaînes (à moins qu'elles ne soient internées) lorsque l'application s'exécute. Si vous ne les voyez pas, je suppose que vous tenez des références ou que les chaînes sont en cours d'internement. –
Il n'y a généralement pas grand intérêt à utiliser une référence faible pour désigner un objet profondément immuable, en particulier un objet qui ne fait référence à aucun autre objet. Si les données sont utiles, vous devriez avoir une référence forte. Si ce n'est pas utile, vous ne devriez pas avoir de référence. L'utilisation de WeakReference n'est vraiment appropriée que dans les cas où l'utilité de l'objet faiblement référencé dépend de l'existence d'une référence forte; le cas le plus courant est celui où une référence faible est utilisée pour placer des informations dans un objet qui sera lu via une référence forte. Si personne ne lit l'information mise dans l'objet, il n'y a plus aucune raison pour que l'écrivain s'en soucie.
- 1. WeakReference Bug?
- 2. C#: Notification avant que WeakReference ne soit collecté?
- 3. Implémentation de WeakReference dans .NET
- 4. Quel est le secret pour que ClaimsResponse fonctionne avec DotNetOpenId?
- 5. Ouvrir un fichier avec std :: string
- 6. Comment est-ce que str.translate fonctionne avec les chaînes Unicode?
- 7. HtmlTextWriter to String - Est-ce que je regarde quelque chose?
- 8. Quand utiliser CultureInfo.GetCultureInfo (String) ou CultureInfo.CreateSpecificCulture (String)
- 9. en utilisant std :: find_if avec std :: string
- 10. Comment vérifier que mod_rewrite fonctionne
- 11. /v en C# string
- 12. Est-ce que django-tagging 0.3 fonctionne avec django 1.1?
- 13. Comment faire pour que dotnetopenid fonctionne avec AOL
- 14. Obtenir que Tomcat fonctionne correctement avec Netbeans 6.7 sous Linux
- 15. Est-ce que Qt fonctionne bien avec STL & Boost?
- 16. Comment faire pour que mon UserControl WPF fonctionne avec CompositeCollection
- 17. Est-ce que Tycho fonctionne avec Eclipse 3.5
- 18. Est-ce que WCF fonctionne bien avec Java?
- 19. Est-ce que CachedRowSet fonctionne avec toutes les implémentations ResultSet?
- 20. Est-ce que JasperReports/iReport fonctionne avec les annotations Hibernate?
- 21. Est-ce que .Net Entity Framework fonctionne avec un .mdb?
- 22. Problèmes pour que l'effet AJAX fonctionne avec RubyOnRails
- 23. Est-ce que model.CharField ('blank = False') fonctionne avec save()?
- 24. Est-ce que Rails fonctionne maintenant avec Ruby 1.9?
- 25. IDictionary <string, string> ou NameValueCollection
- 26. Mappage JPA <String, String>
- 27. php Object to String
- 28. interpolation String en JavaScript
- 29. Est-ce que solr fait une facette sur String vide?
- 30. memorystream - stringstream, string, autres?
C'était ma première pensée, mais est-ce vrai? Voir aussi cette question: http://stackoverflow.com/questions/208387/weakreference-bug – Razzie
@Razzie: C'est juste une implication de la façon dont le GC fonctionne avec les chaînes de caractères. – Noldorin