C# , Funktionsaufruf dauert extrem länger als der eigentlich Code darin

Athor

Mitglied
Guten Tag

Mich beschäftigt zu Zeit die Geschwindigkeit von einigen Funktionen in meinem c# Programm.
Zum Testen habe ich mal vollgendes gemacht


public void Ausserhalb
{
DateTime a = DateTime.Now;

Innerhalb();

TimeSpan ts = DateTime.Now - a;
System.Diagnostics.Trace.TraceInformation("Ausserhalb : " + ts.TotalMilliseconds.ToString());
}

public void Innerhalb
{
DateTime a = DateTime.Now;

//Code
...
...

TimeSpan ts = DateTime.Now - a;
System.Diagnostics.Trace.TraceInformation("Innerhalb : " + ts.TotalMilliseconds.ToString());
}

Die Ausgabe sieht dann in etwa so aus :
Innerhalb : 30ms
Ausserhalb : 250ms

Das verlassen der Funktion kostet scheinbar imens viel Zeit und ich habe keine Ahnung wieso.
Ist der Garbage Collector genau zu dieser Zeit am arbeiten wenn die Object "aufgelöst" werden sollen und braucht deshalb soviel Zeit?

Bzw. was kann/soll man dagegen machen dass der eigentliche Code um einiges schneller ist als das aufräumen der Objekte?

Hat da jemand Erfahrung darin oder kann eine Idee liefern was ich testen könnte damit es scheller wird?

Vielen Dank!

Grüsse, Dani
 
Kann es sein, dass das an der Ausgabe liegt? Wesentlich genauere Werte kriegst du so:

Code:
Declare Function QueryPerformanceCounter Lib "Kernel32" (ByRef X As Long) As Short
Declare Function QueryPerformanceFrequency Lib "Kernel32" (ByRef X As Long) As Short

Dim Ctr1, Ctr2, Freq As Long
QueryPerformanceCounter(Ctr1)

     ' Hier zu messende Befehle einfügen

QueryPerformanceCounter(Ctr2)
QueryPerformanceFrequency(Freq)

Debug.WriteLine((Ctr2 - Ctr1) / Freq)

Zumindest wäre es einen Versuch wert.
 
Habs mit Stopwatch versucht und habe es auch versucht die Ausgabe mal nicht zu machen und stattdessen die Zeitdifferenz in eine Variable zu speichern die ich danach per Debug abgefragt habe.

Bei beiden Varianten leider das selbe Resultat. INtern dauert die Funktion 30ms, nach Aussen hin dauert sie 250-300ms.

Hab gestern angefangen die Object die ich in der Funktion benutze explicit mit Dispose freizugeben, aber bislange änderte sich nichts an der Geschwindigkeit.

Habe testweise auch die destruktoren der Object mal per Breakpunkt beobachtet die darin verwendet werden...ohne Erfolg. Sprich die Object werde zu dem Zeitpunkt nicht freigegeben, also kann es irgendwie nicht der GC sein der da solange dauert.
 

Neue Beiträge

Zurück