xnoise wrote:
> Il 03/01/2013 19:31, Raffaele Rialdi [MVP] ha scritto:
>
>>
>> Il consiglio quindi ... ᅵ di passare a WPF e di lasciar perdere Winform.
>
> Grazie del suggerimento. XAMl mi sembra di aver capito trattasi di un
> linguaggio di markup che alla fine genera codice .NET . I vantaggi da te
> enumerati da cosa derivano visto che sotto sotto il codice usato e' lo
> stesso?
>
Da tutta l'infrastruttura (liberie + dispatcher) che c'ᅵ dietro.
Winform come dicevo ᅵ solo un wrapper e quindi c'ᅵ sempre la message
pump con i controlli base Win32 che dettano le regole.
Per esempio una textbox o un button ha quella forma perchᅵ ᅵ disegnato
cosᅵ in kernel mode da windows. Rifarlo con winform ᅵ una enorme
perdita di performance perchᅵ la tua app gira un user mode e quindi hai
montagne di context switch da user a kernel mode.
Inoltre la maggior parte delle chiamate ai controlli winform finiscono
in una pinvoke che ᅵ notoriamente poco performante.
In WPF invece hai il dispatcher che funge da coda al posto della
message pump e il rendering non avviene al momento in cui lo esegui
dall'applicazione ma viene passato a DirectX che provvede a fare il
merge dei vari strati in modo da poter realizzare in modo 'economico'
anche le trasparenze (nelle trasparenze ridisegnare le stesse zone ᅵ
eccessivamente dispendioso, invece in WPF avviene prima il blend
'logico' e poi l'effetivo disegno)
Con questa logica disegnare un controllo base o uno custom ᅵ del tutto
indifferente e quindi puoi descrivere in xaml il contorno del tuo
bottone a zig zag. Il codice generato ᅵ C# ma alla fine quello che
conta ᅵ che chiami una primitiva che passa al dispatcher le istruzioni
di redraw.
Al momento in cui tutto il blocco del redraw finisce a WPF, lui usa
DirectX per disegnarlo e che puᅵ avvalersi della GPU.
Tra l'altro dentro l'sdk c'ᅵ un tool di performance di WPF che ti
permette di vedere quanta memoria GPU stai usando, e ti fornisce
parametri che ti permettono di migliorare le performance.
Fai una prova, la differenza in performance ᅵ abissale.