Ich habe einen Teil des Codes, der auf großen Arrays von double
(mit mindestens etwa 6000 Elemente) und führt mehrere hundert Mal (in der Regel 800).Speicherlecks während der Verwendung von Doppel-Array
Wenn I Standard-Schleife verwenden, wie folgt aus:
double[] singleRow = new double[6000];
int maxI = 800;
for(int i=0; i<maxI; i++)
{
singleRow = someObject.producesOutput();
//...
// do something with singleRow
// ...
}
der Speicherverbrauch steigt für etwa 40 MB (von 40 MB im beggining der Schleife am Ende der 80 MB).
Wenn ich erzwinge, den Garbage Collector bei jeder Iteration auszuführen, bleibt die Speicherbelegung bei 40 MB (der Anstieg ist nicht signifikant).
double[] singleRow = new double[6000];
int maxI = 800;
for(int i=0; i<maxI; i++)
{
singleRow = someObject.producesOutput();
//...
// do something with singleRow
// ...
GC.Collect()
}
Aber die Ausführungszeit ist 3 mal länger! (es ist entscheidend)
Wie kann ich die C# zwingen, den gleichen Bereich des Speichers zu verwenden, anstatt neue zuzuweisen? Hinweis: Ich habe Zugriff auf den Code someObject
Klasse, also wenn es erforderlich wäre, kann ich es ändern.
Ich würde gerne sehen, was Sie mit dem Array tun, nachdem Sie es erhalten und wie die producesOutput funktioniert, wenn möglich. –