| 

.NET C# Java Javascript Exception

2
Ich möchte Methoden anhand der Speicher- und CPU-Auslastung und anhand der Zeitdauer überwachen und anhand von vorgegebenen Grenzwerten automatisiert pausieren und/oder beenden können. Wie setze ich sowas um, so dass es möglichst einfach mit beliebigen Methoden nutzbar ist?
News:
08.08.2011
ControlFreak 165 4
3 Antworten
1
Ich würde es mit aspektorientierter Programmierung versuchen. Der Aspekt muss dann eben entscheiden können, ob die Funktion (als Ganzes) ausgeführt wird, oder wartet, oder gar nicht ausgeführt wird. Dazu muss der Aspekt sich dann zu jeder Funktion eine Liste von Ausführzeiten und Grenzwerten merken, die dann in einer statischen Objektstruktur abgelegt sein müssten.

Oder meintest Du mit pausieren, den Thread anhalten, der die Funktion gerade ausführt? Dann müsstest Du jede Funktion in einem eigenen Thread ausführen, und Dir die einzelnen Threads in einer Liste merken, und anschliessend die PerformanceCounter durchwühlen. Machbar, aber sicher kein Spass...
08.08.2011
sgf 426 3
1
Hallo ControlFreak,

mir ist Dein UseCase nicht ganz klar, aber es klingt für mich so, als willst Du einen Profiler implementieren. Dabei hilft Dir die CLR ProfilingAPI.

Da kann ich sgf nur zitieren,
Machbar, aber sicher kein Spass...


Viel Erfolg
Florian
08.08.2011
ffordermaier 8,4k 3 9
0
Hallo Control-Freak,

um welche Technologie handelt es sich?
Unter .net stelle ich mir eine Überwachung der Speicherauslastung ziemlich schwer vor. Der Garbage-Collector gibt erst wieder Speicher frei, wenn er unter Druck kommt.
Du könntest die Klasse MemFailPoint verwenden. Dieser kann man eine Anzahl an MB mitgeben und testen ob man noch soviel Speicher vom System bekommen würde. Dazu muss man natürlich in etwa wissen, wieviel Speicher man zum Ausführen der Methode benötigt.

CPU-Auslastung stelle ich mir ebenfalls sehr schwer vor. Gerade bei Multithreading und mehreren Kernen.

Die Zeitdauer eine Methode sollte nicht so schwer sein. Allerdings stellt sich hier die Frage ab wann eine Methode zu langsam ist. Man muss ja auch die System-Umgebung berücksichtigen (z.B. Hardware, laufende Prozesse usw.).

Insgesamt würde ich empfehlen in Sachen Speicher und Laufzeit möglichst performant zu programmieren. Den Rest, Speicherverwaltung, Verteilung der Threads kann das System am effizientesten verwalten.

Gruß

CodeSniffer
09.08.2011
CodeSniffer 1,3k 4 9

Stelle deine Methoden-Frage jetzt!