2017-01-13 3 views
0

Wie misst man den Speicherverbrauch eines Threads in C#?Messen des Speicherverbrauchs eines Threads

Das Szenario, das ich betrachte ist, dass ein Programm versucht, einige harte Suchprobleme zu lösen, es startet einen Thread, um nach einer Lösung für eine von ihnen zu suchen, der Thread läuft für eine Weile, vielleicht findet es eine Lösung, oder vielleicht läuft es über seine Speichererlaubnis und schlägt daher fehl. Aber um das zu implementieren, muss man herausfinden, wie viel Speicher der Thread (im Gegensatz zum gesamten Prozess) verwendet. Gibt es eine Möglichkeit, das zu tun?

Antwort

2

Threads teilen sich einen gemeinsamen Heap, haben aber ihren eigenen Stack.

Anstatt zu versuchen, die Speicherbelegung für einen bestimmten Thread zu erhalten (was nicht möglich ist), sollten Sie Ihre Lösung mit Visual Studio Memory Profiler besser profilieren oder den Ants Memory-Profiler verwenden, um mögliche Speicherprobleme zu erkennen.

Spuckt Ihre Anwendung irgendwelche Ausnahmen aus?

+0

Richtig, um zu verdeutlichen, ist der Grund für hohen Speicherverbrauch kein Fehler im Programm, sondern inhärent in der Natur des Versuchs, Probleme zu lösen, z. Theorem Beweisen, wo die bekanntesten Algorithmen eine große Menge an Speicher für einige kleinere Problem-Instanzen verbrauchen. Aber wenn es keinen Weg gibt, es zu tun, dann gibt es keinen Weg. Vielleicht sollte ich stattdessen getrennte Prozesse ausführen. – rwallace