I controlli di ridisegno in c # offrono maggiori prestazioni?

-1

Ora mi rendo conto che questa è una specie di domanda strana ma eccola qui: Supponiamo di ridisegnare tutti i controlli da solo piuttosto che usare quelli forniti di default (Ovviamente sto parlando di winforms poiché WPF è già un set di controllo personalizzato e le winform sono solo un modo per accedere all'API Win32). Ora faccio un'applicazione con i miei controlli personalizzati. Quindi faccio un'applicazione con winforms che, a sua volta, usa l'API Win32. Ora, quando eseguo entrambe le applicazioni, ci saranno differenze di prestazioni? Se sì, che funzionerà meglio?

Ora arriva la domanda principale: In che modo (e in base a quale / i fattore / i) decidi / prevedi quale sarà il rendimento migliore?

P.S. Perdonami se non sono abbastanza chiaro. Ho sempre difficoltà ad esprimere i miei pensieri.

    
posta Rakshith Ravi 01.02.2015 - 13:28
fonte

2 risposte

7

Ricorda che il codice BCL di .NET Framework è ottimizzato per utile per il maggior numero di programmatori , non per le buone prestazioni nella tua particolare applicazione. Quindi è molto probabile che tu possa battere le prestazioni di un particolare pezzo di esso, anche se non sei un Rico Mariani .

Tuttavia, dovresti imparare da quegli esperti, in particolare i mantra come "Misura, Misura, Misura". Ciò non significa che devi compilare ed eseguire il debug della tua versione completamente prima di capire se puoi battere il BCL. Significa che identifica quali parti del codice della libreria ti causano problemi di prestazioni, quindi non sprecare sforzi reinventando ciò che non importa.

Una volta che sai quanto è buono o cattivo il rendimento del codice per scopi generici, hai buone probabilità di prevedere se sarai in grado di batterlo. Soprattutto se esegui alcuni test di scalabilità. Ci sono molti widget forniti dal framework in cui semplici operazioni come l'aggiunta di più elementi listbox 1 hanno una complessità quadratica (o peggiore) ... semplicemente perché il maggior numero di applicazioni non inserisce mai più di due dozzine di elementi nel controllo comunque. Dotato di una stima della complessità del runtime del widget standard (e della memoria) per le operazioni di cui hai bisogno, saprai esattamente dove hai la possibilità di fare meglio in un modo che paga dividendi per il tuo sforzo.

1 A volte la documentazione li mette in evidenza e fornisce anche un modo per inserire codice ottimizzato per l'applicazione senza buttare via l'intero componente della libreria. Ad esempio, ListView "modalità virtuale" o "Proprietario-Disegna" per i tradizionali controlli Win32.

    
risposta data 01.02.2015 - 19:56
fonte
3

Non "decidi / prevedi" quelle cose. Allo stesso modo, non prevedi dove si trova un collo di bottiglia.

Se hai bisogno di sapere quale soluzione è più veloce, fai entrambe le cose e poi confronta i risultati del benchmarking.

Comprendi che il risultato dipenderà, tra l'altro, da quanto sono buone le tue capacità di ottimizzazione rispetto alle abilità degli sviluppatori Microsoft, e non possiamo sapere quanto sei bravo, giusto?

Ci sono molti parametri coinvolti nelle prestazioni: le tue capacità di profilazione / ottimizzazione, ma anche quelle puramente tecniche, come il numero di livelli di astrazione. È possibile ottenere risultati di prestazioni eccellenti per una soluzione fatta in casa fatta durante un fine settimana. Oppure puoi passare mesi a profilare e ottimizzare la tua app e continuare a essere dietro le prestazioni di .NET Framework. A meno che tu non faccia effettivamente il test, non puoi sapere la risposta.

    
risposta data 01.02.2015 - 13:36
fonte

Leggi altre domande sui tag