Domanda

So che .NET è JIT compilato per l'architettura si esegue su appena prima che l'app funziona, ma fa il compilatore JIT per ottimizzare architettura a 64bit a tutti?

C'è qualcosa che deve essere fatto, o pensato in caso di programmazione di un'applicazione che verrà eseguito su un 64bit system?(cioèUtilizzando Int64 migliorare le prestazioni e il compilatore JIT automaticamente Int64 lavoro sui sistemi a 32 bit?)

È stato utile?

Soluzione

Il 64bit JIT è diverso da quello per il 32bit, quindi mi aspetto che alcune differenze nell'output - ma non vorrei passare a 64bit solo per quello, e non mi aspetto molto da guadagnare velocità (se presente) nel tempo di CPU passando a 64bit.

Si noterà un grande miglioramento delle prestazioni se l'applicazione utilizza un sacco di memoria e il PC dispone di RAM sufficiente per tenere il passo con essa.Ho trovato che il 32bit .NET applicazioni tendono a iniziare a gettare fuori di eccezioni di memoria quando si arriva a circa 1,6 gb in uso, ma iniziano a dimenarsi disco a causa di paging molto prima che - in questo modo di essere di I/O bound.

In sostanza, se stai collo di bottiglia è la CPU 64bit quindi è improbabile per aiutare.Se il tuo collo di bottiglia è la memoria, allora si dovrebbe vedere un grande miglioramento.

Utilizzando Int64 migliorare le prestazioni e il compilatore JIT automaticamente Int64 lavoro sui sistemi a 32 bit

Int64 già che funziona sia a 32 bit e sistemi a 64bit, ma sarà più veloce in esecuzione su sistemi 64bit.Quindi, se siete più il numero scricchiolio con Int64, in esecuzione su un sistema a 64 bit dovrebbe aiutare.

La cosa più importante è misura la vostra performance.

Altri suggerimenti

Questo è un buon articolo sull'argomento, da una delle persone che hanno lavorato a 64 bit JIT.In sostanza, a meno che non hai assolutamente bisogno di spazio degli indirizzi a 64 bit è in grado di offrire, o che dobbiamo fare a 64 bit di matematica, è probabile che perdere prestazioni.Come puntatori sono più grandi, la cache è effettivamente dimezzato, per esempio.

Ho notato 64-bit per essere molto più lento.

Come è stato affermato a 64 bit compilatore JIT si comporta in modo diverso per il compilatore JIT x86.X86 compilatore usufruire di alcune ottimizzazioni che x64 non.

Per esempio in .NET 3.5 a 32-bit JIT si inline chiamate di funzione con le strutture come argomenti, ma a 64 bit JIT non.

Nel codice di produzione ho visto x86 costruisce l'esecuzione di oltre il 20% in più rispetto a x64 build (senza altre modifiche)

Per riassumere, 64 bit solo se

  1. Hai bisogno di memoria aggiuntiva e non c'è modo intorno ad esso.
  2. Si programma ad es.scientifico apps e hanno bisogno di maggiore precisione matematica

Su ogni altro aspetto, come di oggi, il compilatore a 64 bit in .NET è un passo verso il basso.

Ottimizzazioni delle prestazioni di fatto nel .NET compilatori sono un grosso problema.

Colli di bottiglia delle prestazioni sarà la stessa indipendentemente dal fatto che l'architettura è a 32 o a 64 bit.Problemi di prestazioni tendono ad essere il risultato di sub-ottimale di algoritmi — la scelta tra 32 e 64 bit tipi non influiscono notevolmente sulle prestazioni.

Soprattutto, non cercare di migliorare le prestazioni di qualcosa prima di aver misurato.In particolare si dovrebbe profilo il codice per determinare dove la vostra performance sono i colli di bottiglia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top