Welche ungewöhnlichen, unerwarteten Konsequenzen sind in Bezug auf Leistung, Speicher usw. aufgetreten, wenn Sie vom Ausführen Ihrer .NET-Anwendungen unter dem 64-Bit-JIT vs. dem 32-Bit-JIT wechseln? Ich interessiere mich für das Gute, interessiere mich aber mehr für die überraschend schlechten Probleme, denen die Leute begegnet sind.Meine 32-Bit-Kopfschmerzen sind jetzt eine 64-Bit-Migräne?!? (oder 64bit .NET CLR Runtime-Probleme)
Ich schreibe gerade eine neue .NET-Anwendung, die sowohl in 32bit als auch in 64bit eingesetzt wird. Es gab viele Fragen in Bezug auf die Probleme mit der Portierung der Anwendung - ich bin nicht von der "gotchas" from a programming/porting standpoint betroffen. (dh: natives/COM-Interop korrekt behandeln, Referenztypen, die in Strukturen eingebettet sind, die die Größe der Struktur ändern, usw.)
Aber this question and it's answer hat mich zum Nachdenken gebracht - Welche anderen Probleme übersehe ich?
Es gab viele Fragen und Blogeinträge, die sich um dieses Problem drehen, oder einen Aspekt davon treffen, aber ich habe nichts gesehen, das eine anständige Liste von Problemen zusammengestellt hat.
Insbesondere - Meine Anwendung ist sehr CPU-gebunden und hat riesige Speicherverbrauchsmuster (daher die Notwendigkeit für 64bit an erster Stelle), sowie von Natur aus grafisch sein. Ich mache mir Sorgen darüber, welche anderen versteckten Probleme in der CLR oder JIT unter 64-Bit-Windows (mit .NET 3.5sp1) auftreten können.
Hier sind ein paar Fragen, die ich zur Zeit bewusst bin:
- (Now I know that) Eigenschaften, auch automatische Eigenschaften, werden nicht in x64 inlined.
- Das Speicherprofil der Anwendungsänderungen sowohl wegen der size of references, sondern auch, weil die Speicherzuordner unterschiedliche Leistungsmerkmale haben
- Startup times can suffer on x64
Ich würde gerne wissen, was andere, spezifisch, Menschen gibt habe ich im JIT auf 64bit Windows entdeckt, und auch wenn es Workarounds für die Performance gibt.
Danke euch allen!
---- EDIT -----
Nur um zu klären -
ich weiß, dass früh zu optimieren versuchen oft schlecht. Ich bin mir bewusst, dass das zweite Raten des Systems oft schlecht ist. Ich weiß auch, dass die Portabilität zu 64bit ihre eigenen Probleme hat - wir laufen und testen täglich auf 64bit-Systemen, um dabei zu helfen. usw.
Meine Anwendung ist jedoch nicht Ihre typische Geschäftsanwendung. Es ist eine wissenschaftliche Softwareanwendung. Wir haben viele Prozesse, die mit 100% CPU auf allen Kernen (es ist in hohem Grade threaded) stundenlang sitzen.
Ich verbringe viel Zeit Profiling der Anwendung, und das macht einen großen Unterschied. Die meisten Profiler deaktivieren jedoch viele Funktionen des JIT, sodass die kleinen Details in Dingen wie Speicherzuweisung, Inlining im JIT usw. sehr schwer feststellbar sind, wenn Sie unter einem Profiler laufen. Daher mein Bedürfnis nach der Frage.
Dieser Thread wäre viel nützlicher (einfach mit Google oder Stacko-Suche, usw. zu finden), wenn der Titel auf die .NET 32- und 64-Bit-Laufzeiten bezogen. –