Gibt es Überlegungen erforderlich, genommen werden, um Ihr .net-Programm auf x64 vs x86 läuft?

StackOverflow https://stackoverflow.com/questions/145026

  •  02-07-2019
  •  | 
  •  

Frage

Ich glaube, der Architekturtyp (x86 vs x64) für Sie weg abstrahiert wird, wenn .Net-Programme zu machen, aber gibt es andere Überlegungen, die Probleme verursachen kann?

War es hilfreich?

Lösung

Vorsicht vor Dritt COM-Bibliotheken oder Dritten .NET-Bibliotheken, die heimlich win32 Anrufe tätigen. Das ist, wo wir unsere größten Probleme hatten.

Andere Tipps

Aus dem MSDN doco unter anderem Überlegungen:

  

In vielen Fällen Baugruppen wird das gleiche auf den 32-Bit oder 64-Bit-CLR ausgeführt werden. Einige Gründe für ein Programm, sich anders zu verhalten, wenn sie von der 64-Bit-CLR ausgeführt sind:

     
      
  • Structs, die Mitglieder enthalten, dass   ändern Größe abhängig von der Plattform,   wie jeder Zeigertyp.

  •   
  • Pointer-Arithmetik, der folgendes beinhaltet   konstante Größen.

  •   
  • Falscher Plattformaufruf oder COM   Erklärungen, die Int32 verwenden für   statt IntPtr behandelt.

  •   
  • Casting IntPtr zu Int32

  •   

Auch Standardspeicherorte.

Dieser Artikel hat viele gute Themen zu beachten: http://osnews.com/story/20330/Windows_x64_Watch_List

Persönlich, mein Chef hat einen 64-Bit-Vista-Computer, und ich programmiere in einem 32-Bit-Modus. Wir haben in die folgenden Probleme auftreten:

  • Registry für 32-Bit-Anwendungen wird (Art) in einen Wow6432Node Ordner versteckt. Nicht alle Anwendungen, die Sie einen Pfad für die in der Registrierung zu finden, werden in diesem Knoten verwendet werden (SQL Server wird nicht, zum Beispiel).

  • SysWow64 im Verzeichnis C:. \ Windows-Ordner können dazu führen, Probleme von DLLs nicht zu sein, wo sie gebraucht wird (wir hatten dieses Problem w / a 3rd-Party-Lizenzierungskomponente)

  • Manchmal sind die Dateien, die Sie brauchen, sind in "C: \ Program Files (x86)" statt "C: \ Program Files". Saugt auch.

  • Lese und auf 64-Bit-Werte zu schreiben Thema ist nicht sicher auf einer 32-Bit-Plattform. einen 64-Bit-Wert zu lesen dauert zwei Operationen, die von einem Kontextschalter unterbrochen werden könnten. Finden Sie im MSDN-Artikel auf Threading.Interlocked.Read für weitere Informationen.

  • Auch stimmen völlig mit natorische 's Antworten ! : -)

MSDN hatte ich ein wenig Papier in Bezug auf Fragen der Portierung von 32-Bit-Anwendungen über 64-Bit-Ausführungsumgebung setzen.

http://msdn.microsoft.com/en-us/library /ms973190.aspx

Zwei andere Blogger hatten zuvor schreiben über 64-Bit-Entwicklung, wenn sie in dem CLR-Team arbeiten

x64 ermöglicht es Ihnen, mehr Speicher zu adressieren, aber der gleiche Code gegeben, es wird mehr Speicher als x86 verwenden.

Nach meiner Erfahrung einer Asp.NET Anwendung Portierung war grundsätzlich einwandfrei. Führen Sie auf 32-Bit-Maschine und auf 64-Bit und kein Problem tritt auf, neben mehr Speicher zur Verfügung zu haben. Dies geschieht, weil viele der Probleme bereits erwähnt (Registry, Gewindeschneiden usw.) wird von Asp.NET verwaltet, und Sie müssen sie richtig fix in der Asp.NET-Umgebung ausgeführt werden.

Client-Seite (Windows-Formular) das gleiche passiert ist, aber es, wenn Sie einige „unsicher“ APIs verwendet habe, um spezielle Ordner oder Registry-Zugriff zu bekommen dann irgendein Problem kann passieren, wie bereits erwähnt.

Viele Grüße Massimo

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top