Frage

Ich habe eine WinForms-App, die sich auf mehrere Bibliotheken setzt, über die ich eine begrenzte Kontrolle habe, wie beispielsweise Formulare und Formulare.WebBrowser. Sporadische plötzliche Speicherlecks verursachen meine Anwendung zum Absturz. Diese sind keine überdurchschnittlichen Speicherlecks, die aufbauen. Sie sind zufällig, oft unterschiedliche Kom-Ausnahmen und sind nicht vorhersagbar - manchmal passieren sie nach einer Stunde, manchmal nach einem Tag.

Meine aktuelle Methodik, um das Problem zumindest vorübergehend zu bewältigen, besteht darin, eine andere Anwendung zu überprüfen, um sicherzustellen, dass der erste mit GETPROCESSESSYNAME () ausgeführt wird. Dies ist jedoch problematisch, weil der laufende Prozess manchmal abstürzt, aber nicht schließt. Ich bekomme nur eine WER-Nachricht (trotz der Tatsache, dass wer auf dem Computer ausgeschaltet ist). Was noch schlimmer ist, ist, dass, wenn der erste Prozess abstürzt, und das Speicherleck aufbaut, stürzt auch die zweite Prozessprüfungsanwendung ab. Und dann funktioniert nichts, bis ich den ganzen Shabang manuell neu starte.

1) Kennt jemand einen effektiven Weg, um einen Prozess zu verarbeiten, wenn Prozess B läuft, ohne den Prozess A zu haben, ohne den Speicherproblemen ausgesetzt zu sein, der Prozess B-Absturz vorgenommen hat?

2) Wenn das oben genannte nicht möglich ist oder zu schwierig ist, weiß jemand irgendwas gute Drittanbieter-Tools, mit denen Sie sicherstellen können, dass Prozesse ohne herausragende WER-Fehler läuft, die Prozesse neu starten, wenn Fehlerfehler erkannt werden, und das kann maximal ausgedrückt werden?

danke!

War es hilfreich?

Lösung

Anstatt versuchen, das Problem umzugehen, sollten Sie versuchen, es zuerst zu beheben.

Wenn Sie mit der Verwendung von nicht verwalteten Ressourcen mit der Verwendung von Speichern bestehen, würde ich sagen, dass die von Ihnen geworfenen Ausnahmen ignoriert werden, die von Ihnen COM-Komponenten, fangen, dann entsorgen und erneut inmitten

daneben scheint, dass Ihr Prozess nicht stürzt, sondern eher nicht mehr reagiert.Sehen Sie process. entspricht .Oder überwachen Sie den Speicherverbrauch und töten Sie es, wenn es eine bestimmte Grenze überschreitet Prozess.WorkingSet64

Andere Tipps

Normalerweise würde ich PSKill verwenden, um den Prozess von der Befehlszeile zu töten.Noch nicht viel, um einen .NET-Dienst zu schreiben.

Die Tatsache, dass Ihre vermutlich kleine und einfache Prozess-Check-App-App nicht mehr fällt, würde mich dazu bringen, zu glauben, dass mit dem tatsächlichen System etwas nicht stimmt.

pslist &pskll

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top