2011-08-23 3 views
5

Possiedo un'app. Net4 WinForms che fa riferimento a assiemi .Net2 di terze parti, che contengono controlli visivi grafici. Ho notato un miglioramento enorme nelle prestazioni visive dell'app quando l'ho accidentalmente passato da AnyCpu alla modalità di compilazione x86. Il mio rig di sviluppo è un x64 di Windows 7. Il miglioramento è di un fattore di almeno due quando i controlli stanno rendendo i loro elementi grafici.. Gli assembly Net2 ospitati nell'app .Net4 hanno prestazioni migliori in x86 rispetto alla modalità AnyCpu?

È un fatto noto o sto facendo qualcosa di sbagliato?

risposta

3

vedere questi due articoli al riguardo:

AnyCPU Exes are usually more trouble than they're worth

Visual Studio: Why is there no 64 bit version? (yet)

Vedi anche questo post circa il 64-bit di codice: Should I choose to take advantage of 64-bit?, si afferma chiaramente che, ad esempio Paint.NET funziona meglio sotto in Modalità a 64 bit, perché lo sviluppatore ha ottimizzato il codice per 64 bit.

Quindi, non penso che tu stia facendo qualcosa di sbagliato, ma forse gli assembly di terze parti .NET che stai utilizzando potrebbero essere migliorati in modo specifico durante l'esecuzione in un processo a 64 bit.

+0

Questi altri assembly utilizzano le routine di disegno gestito da System.Drawing (che IIRC racchiude semplicemente le chiamate GDI +), quindi non sono sicuro di come potrebbero essere migliorati per 64 bit, poiché non ci sono ottimizzazioni specifiche della piattaforma in Managed .Net (che io sapere di). –

2

Questo non mi sorprende. Quando si imposta l'applicazione per la compilazione su "Qualsiasi CPU", il CLR genera un'applicazione che il jiter sulla macchina dell'utente deve compilare ulteriormente per adattarsi al meglio alla propria architettura. Se lo si imposta su "x86", il compilatore dev compila l'applicazione per una macchina x86, che riduce il carico del jiter dei client.

+0

Che cosa significa 'jiter'? – abatishchev

+0

Siamo spiacenti. JIT sta per "Just in Time" e il riferimento a un JITer significa il compilatore "just-in-time" che compila il codice IL in codice macchina specifico per la macchina degli utenti quando l'applicazione viene lanciata per la prima volta. – RLH

+0

So cosa è il compilatore JIT ma non sono mai stato usato per vedere JITer come compilatore JIT. – abatishchev