2014-07-01 32 views
5

Ja tylko pisanie małą aplikację, w której mam funkcji, która wygląda tak:QFileDialog wyciek pamięci?

QString askForDir() 
{ 
    return QFileDialog::getExistingDirectory(this, "Choose directory", QString("")); 
} 

Od Dodałem tę funkcję już wspomniano, że alokacja pamięci stał się dość dziwne, po użyciu tej funkcji (askForDir()) .
używam OS X Instruments aplikację do debugowania musi więc oto co mam:
Snapshot Szczyty są momenty kiedy askForDir() funkcja działa, mam na myśli budowę dir-drzewo.
Pomiędzy tymi pikami są miejsca, w których nic się nie dzieje, mam na myśli aplikację nic nie robiącą, czekającą na inną akcję od użytkownika.
Jak widać alokacja pamięci rośnie. Jeśli chcesz numery:

at 30sec - 91 Mb 
at 50sec - 113 Mb 
at 1m15sec - 135 Mb 


każdym razem rośnie w 22 Mb

Próbowałem go zbadać i zmienił askForDir() funkcję czymś tak:

QString askForDir() 
{ 
    return "/Users/username/Desktop"; 
} 

Wszystko co mówił powyżej zniknął. Tak, doszedłem do wniosku, że problem jest w QFileDialog.


Oto co używam:

  • OS X 10.9.4
  • Xcode 5.1.1 Carbon
  • Qt 4.8.6

Czy ktoś taki sam "problem"?

+0

Qt 4.8.co? Używając węgla lub kakao? Przy takich problemach musisz być bardzo konkretny. –

+0

@KubaOber, 4.8.6, Carbon – tema

+0

Sugeruję rekompilację qt dla kakao i próbę ponownie. Jeśli to nadal pokazuje to zachowanie, to jest to błąd i będziesz musiał złożyć raport o błędzie. –

Odpowiedz

4

Wygląda na to, że to rozumiem.
To nie jest przeciek, ani błąd. Po otwarciu notatnika w systemie Windows XP wykorzystanie pamięci wynosi 4 MB. Kliknij na plik-> otwórz, a następnie zużycie pamięci rośnie do 9 MB. Zamknij okno i widać, że zużycie pamięci nie spada (lub tylko około 8,9 MB). Windows najwyraźniej buforuje/tworzy rzeczy na naszych plecach (na przykład buforowanie). -> To jest na natywny użytek.

Dla obcokrajowców, To jest to samo. Przy pierwszym otwarciu biblioteki QFileDialog Qt buforowane są niektóre ikony do późniejszego użycia. Jest to na poziomie aplikacji. To sprawia, że ​​nawigacja w filmie, a także później, jeśli ponownie otworzysz okno dialogowe znacznie szybciej. Nie jest to przeciek, gdy aplikacja jest zamknięta, wszystko jest wydawane.


Wygląda na to, że wszędzie dzieje się to samo, więc myślę, że teraz pytanie nie jest interesujące.