2012-04-07 11 views
0

Am Ende meiner Anwendung rufe ich einfach die folgenden aufzuräumen.Visual C++ 2010 langsam beim Freigeben von Array-Zeigern

delete [] array1; 
delete [] array2; 
delete [] array3; 
delete [] array4; 
delete [] array5; 
delete [] array6; 
delete [] array7; 
delete [] array8; 
delete [] array9; 
delete [] array10; 
delete [] array11; 
delete [] array12; 
delete [] array13; 

13 Zeiger auf Arrays auf dem Heap. Es dauert eine absolute Alter im Debug-Modus ... wie 3-5 Minuten, wenn es praktisch sofort sein sollte. Was gibt?

Update: Ich nahm an, dass ich ein Array von C-style Strukturen (d. H. Strukturen mit nur Primitiven und Zeigern) löschte, aber zwei der Arrays hatte hash_maps in ihnen, die den größten Teil der Zeit zu bereinigen.

+1

Haben Sie überlegt, ein zweidimensionales oder gezacktes Array zu verwenden? –

+1

Welchen Typ haben diese Arrays? –

+1

Was passiert im Freigabemodus? –

Antwort

0

Es gibt verschiedene Dinge, die passieren könnten. Versuchen Sie, das Programm zu stoppen, während es einige Male langsam ist, und sehen Sie, was sich im Debugger auf dem Stack befindet.

Erinnern Sie sich daran, dass der Destruktor des Elementtyps Array immer einmal für jedes Element aufgerufen wird.

3

Wenn die Arrays Objekte mit Destruktoren enthalten, ruft delete [] jeden Destruktor auf.

Wenn die Arrays groß sind, müssen die Objekte möglicherweise aus dem virtuellen Speicher ausgelagert werden, bevor ihre Destruktoren aufgerufen werden können.

Je nach Konfiguration kann delete [] die Grenzbereiche der Arrays überprüfen, um festzustellen, ob Sie Schreibvorgänge außerhalb der Grenzen ausgeführt haben.

Im Allgemeinen sollten Sie die Ausführungszeit im Debug-Modus vollständig ignorieren, aber ich verstehe, warum Sie darüber nachdenken würden, 3-5 Minuten dauern, nur um Ihre Arrays zu befreien.

0

Wenn Sie sich Gedanken über die Leistung machen, führen Sie Ihren Code in einem Profiler aus. Sie kann nicht über Leistung sprechen, ohne über Profiler zu sprechen.

Verwandte Themen