Abbiamo un'applicazione che è mista .NET 2.0 e nativo C++. Nei nostri test, abbiamo una modalità che può scorrere automaticamente una serie di progetti. Un progetto si apre, corre, chiude, ripete. Ognuno di questi passaggi richiede la creazione/distruzione di Windows (Winforms per essere precisi). Recentemente abbiamo riscontrato alcuni strani comportamenti nelle prestazioni. Dopo aver funzionato per alcune ore, le parti di apertura e chiusura rallentano (bloccando il filo dell'interfaccia grafica e mostrando schermate semitranate, ecc.). Ora sarebbe facile bloccarlo fino a una perdita di risorse ... ma stiamo monitorando maniglie e memoria, e mentre la memoria cresce leggermente non c'è nulla che indichi questo livello di problema. Le maniglie sono stabili Quindi forse gestori di eventi penzoloni ... hanno ancora bisogno di indagare su questo. Ma il kicker, che mi lascia perplesso, è che chiudere l'applicazione e riavviarlo non porta indietro le prestazioni iniziali. È ancora lento fino a quando non riavvio il sistema operativo (vinci XP) e quindi le prestazioni iniziano di nuovo scattanti. Questo mi lascia davvero perplesso mentre presumo che la chiusura dell'applicazione richieda tutte le risorse. qualche idea?Degrado delle prestazioni dispari nell'applicazione
risposta
Stavamo perdendo classi di finestre
Sembra una possibile perdita di handle GDI. GDI objects non vengono raccolti automaticamente dal Garbage Collector.
.NET Memory Profiler (http://memprofiler.com/) fa un buon lavoro di tracciamento di questi (c'è una versione di prova di 14 giorni).
Hai visto questi:
Resource Leaks: Detecting, Locating, and Repairing Your Leaky GDI Code
Detect and Plug GDI Leaks in Your Code with Two Powerful Tools for Windows XP (ha un link ad uno strumento di visualizzazione GDI maniglia).
Aggiungerò l'utilizzo di Memory Profiler. Ti consente di scattare istantanee e confrontarle, in modo da poter scattare un'istantanea su una singola iterazione, prenderne un'altra sulla successiva e differirle: puoi vedere esattamente ciò che sta crescendo tra le iterazioni comuni della tua app. – stusmith
Possiedo .NET Memory Profiler e proverò a farlo, ma il fatto che il riavvio dell'applicazione (senza riavvio) non risolva il problema non verrà spiegato da alcunché nella crescita del processo. – user109078
Questo non è vero per alcune risorse di sistema limitate come gli handle GDI .... –
Si presume che sia una perdita di risorse (che non è una cattiva ipotesi), ma potrebbe essere qualcos'altro.
Hai provato a utilizzare un profiler delle prestazioni?
- 1. Javascript degrado delle prestazioni ricorsiva funzione
- 2. Appengine, degrado delle prestazioni con python27
- 3. Degrado delle prestazioni quando si aumenta il numero di core
- 4. Può ridondante "usando" le prestazioni s degrado
- 5. Degrado delle prestazioni dopo l'aggiornamento del modello EF4 al modello EF5 (DbContext)
- 6. HTML5 Video e degrado?
- 7. SignalR Contatore delle prestazioni non visualizzato nel monitor delle prestazioni
- 8. Tracciamento delle prestazioni ORM
- 9. Strano comportamento delle prestazioni
- 10. SOLR ottimizzazione delle prestazioni
- 11. Miglioramento delle prestazioni SQLite
- 12. Redis Ottimizzazione delle prestazioni
- 13. Tipo generico e prestazioni
- 14. C# Carica interi e dispari pari/dispari
- 15. Test automatico delle prestazioni delle librerie Scala
- 16. Ottimizzazione delle prestazioni delle prese Java
- 17. Conseguenza delle prestazioni delle funzioni membro volatile
- 18. Sovraccarico delle prestazioni delle librerie javascript
- 19. Miglioramento delle prestazioni e delle variabili MySQL
- 20. Manipolazione delle stringhe in Lua: Crea il carattere dispari maiuscolo
- 21. Terminologia eccezioni dispari "vomitare"
- 22. rallentamento delle prestazioni di SqlDataReader
- 23. Ottimizzazione delle prestazioni di Lucene
- 24. Eliminazione nullptr - overhead delle prestazioni?
- 25. jQuery - Miglioramento delle prestazioni/Codice
- 26. Contatori delle prestazioni e threading
- 27. Sovraccarico delle prestazioni di AOP
- 28. Gioco ottimizzazione delle prestazioni intervista
- 29. Misurazione delle prestazioni dei client
- 30. Ottimizzazione delle massicce prestazioni dell'inserto ...?
Dovresti eseguire l'app sotto il profiler prima e dopo il rallentamento e confrontare i due risultati. Tutto ciò che spicca per essere drasticamente diverso vale la pena investigare. Esistono molti profiler gratuiti, buoni o gratuiti e buoni, basta provarne alcuni e sceglierne uno con cui ti trovi bene. – Rom