Stellen Sie sich eine reine .NET-Anwendung vor, die keine COM-Komponenten oder PInvoke verwendet. Ist es wichtig, ob das Zielsystem 32 oder 64 Bits hat?Was sind die Unterschiede zwischen .NET in 32- oder 64-Bit-Systemen?
Antwort
sicheren Code ohne COM-Komponenten, P/Invoke usw. sollte es kein semantischer Unterschied Unter der Annahme, aber die Leistung beeinflusst werden kann. Bedenken Sie: Mehr Speicher unter 64 Bit, aber Referenzen sind größer. Mal gewinnt man, mal verliert man.
Wie auch immer, hier sind ein paar nützlichen Hinweise:
- Siehe MSDN: Migrating 32-bit Managed Code to 64-bit. Zitat:
„[...] Betrachten wir eine .NET-Anwendung , die 100% Typ sicheren Code ist in diesem Szenario ist es möglich, Ihre .NET ausführbare Datei zu nehmen, die Sie auf Ihrem laufen. 32-Bit-Maschine und es an das System 64-Bit bewegt und hat es erfolgreich ausgeführt werden. Warum funktioniert das? Seit der Montage ist zu 100% Typ sicher wir wissen, dass es keine Abhängigkeiten auf nativen Code oder COM-Objekte und dass gibt es keinen "unsicheren" Code, der bedeutet, dass die Appl ication läuft vollständig unter der Kontrolle der CLR. Die CLR gewährleistet, dass während der Binärcode , die als Ergebnis der Just-in-Time (JIT) Kompilierung erzeugt wird unterschiedlich zwischen 32-Bit- und 64-Bit sein, der Code, der sowohl ausführt wird semantisch sein das Gleiche. [...„]
In der Theorie der Anwendung In der Praxis gibt es Unterschiede in der Implementierung und auch verschiedene Bugs zwischen den 32-Bit- und 64-Bit-Frameworks. Es ist nicht üblich, aber es passiert. In den letzten 2 Monaten bin ich auf mindestens 3 Szenarien gestoßen, in denen sich identisches MSIL bei der Ausrichtung auf x86 anders verhält als auf AnyCPU auf einem x64-System. –
Wenn die Anwendung AnyCPU wird Targeting, wird das Laufzeitverhalten unterschiedlich sein, insbesondere die Speichernutzung und Einschränkungen.
Auf 64-Bit, wird es nicht die gleichen 32-Bit-Speicher sein, Einschränkungen (2GB max Speicher theoretisch, aber 1,2-1,6 in der Praxis). Allerdings sind alle Objektreferenzen doppelt so groß, so dass 64-Bit-Systeme mehr Speicher benötigen.
auch 64-Bit-Systeme haben oft zusätzliche Register, etc., so dass manchmal kann die Leistung etwas verbessern. Dies ist jedoch plattformspezifisch.
Wenn die Anwendung x86 ist Targeting, wird es unter WoW64 laufen und fast identisch ist handeln, wie es in 32-Bit-Systeme handeln.
Eine andere Möglichkeit, abgesehen von denen, die von Reed Copsey identifiziert werden, ist, ob Ihre "pure" Anwendung die System.IntPtr-Struktur für etwas verwendet oder wenn sie unsicheren Code verwendet (was nicht das Gleiche ist) als P/Invoke) und Zeigerarithmetik. so ziemlich alles in der System.Runtime.InteropServices.Marshal Klasse
Ein weiteres großes achten Anrufe würden. Es gibt alle Arten von tollen Möglichkeiten, sich selbst in den Fuß zu schießen (sehr nützlich, wenn Sie es brauchen, natürlich).
Gute Ergänzungen –
Duplikat. Http://stackoverflow.com/questions/145026 –