J'ai créé un pool de threads qui ont 5 threads. Les deux démarreront lorsque mon application démarrera. Le problème est que je crée autant d'objets en fonction d'appel boucle de fil en arrière sur chacun des fils, et la mémoire est augmentation par seconde lorsque l'application courante, ceci est appel en boucle du fil de retour de la fonction:
Dois-je appeler GC.Collect dans le pool de threads personnalisé?
ThreadLoop vide() {
while (true) {
var checkItems = _workItems.Where (w => w.ActivedTime> 3) .ToList();
foreach (var i in checkItems) {
_workItems [i.Id] .ActivedTime = 0;
_workItems [i.Id] .ExecutePostBack();
}
// Recréer nouveau _workItems dictionnaire de
_workItems = _workItems.Where (w => w .ActivedTime > 0) .ToDictionary();
// fil de sommeil pour libérer momory
Thread.Sleep (1000);
// Appel Grab collecteur de mémoire libre
GC.Collecte();
}}
Je suis confus que, appelle GC.Collect() sur chaque fils comme ce bon ou mauvais? Dose-elle cause de mauvaises performances?
Je dois poster le même commentaire pour vous, les gars. Je veux aussi entendre votre opinion: "quand j'ajoute GC.Collect(), la mémoire est d'environ 100 mb lorsque je lance un pool de threads avec 1000 éléments de travail sur chaque thread, pendant 2 heures, mais quand je supprime GC.Collect() (Laisser .Net recueillir pour moi) la mémoire en hausse seconde par seconde et rarement vers le bas, il est environ 300 ~ 400 mb quels éléments de travail même pendant 2 heures.Le collecteur de saisie .Net fonctionne-t-il pire? Comment faire. mon cas ?" – UmbalaAZ