Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Från och med .NET Framework 4.6 innehåller körningen en ny 64-bitars JIT-kompilator för just-in-time-kompilering. Den här ändringen påverkar inte kompilering med 32-bitars JIT-kompilatorn.
Oväntat beteende eller undantag
I vissa fall resulterar kompilering med den nya 64-bitars JIT-kompilatorn i ett körningsundatag eller ett beteende som inte observeras vid körning av kod som kompilerats av den äldre 64-bitars JIT-kompilatorn. De kända skillnaderna omfattar följande:
Viktigt!
Alla dessa kända problem har åtgärdats i den nya 64-bitars kompilatorn som släpptes med .NET Framework 4.6.2. De flesta har också åtgärdats i tjänstversioner av .NET Framework 4.6 och 4.6.1 som ingår i Windows Update. Du kan eliminera dessa problem genom att se till att din version av Windows är uppdaterad eller genom att uppgradera till .NET Framework 4.6.2.
Under vissa förhållanden kan en unboxing-åtgärd utlösa en NullReferenceException i Versionsversioner med optimering aktiverad.
I vissa fall kan körning av produktionskod i en stor metodtext utlösa en StackOverflowException.
Under vissa förhållanden behandlas strukturer som skickas till en metod som referenstyper i stället för värdetyper i Versionsversioner. En av manifestationerna av det här problemet är att de enskilda objekten i en samling visas i en oväntad ordning.
Under vissa förhållanden är jämförelsen av UInt16 värden med deras höga bituppsättning felaktig om optimering är aktiverat.
Under vissa förhållanden, särskilt vid initiering av matrisvärden, kan minnesinitiering av IL-instruktionen OpCodes.Initblk initiera minne med ett felaktigt värde. Detta kan resultera i antingen ett ohanterat undantag eller felaktiga utdata.
Under vissa sällsynta förhållanden kan ett villkorligt bittest returnera det felaktiga Boolean värdet eller utlösa ett undantag om kompilatoroptimeringar är aktiverade.
Under vissa förhållanden, om en
if-instruktion används för att testa för ett villkor innan du anger etttryblock och i slutet fråntryblocket, och samma villkor utvärderas icatchellerfinally-blocket, tar den nya 64-bitars JIT-kompilatorn bort villkoretifcatchfrån ellerfinally-blocket när koden optimeras. Därför körs kod i -instruktionenifcatchi ellerfinally-blocket villkorslöst.
Minska effekterna av kända problem
Om du stöter på problemen ovan kan du åtgärda dem genom att göra något av följande:
Uppgradera till .NET Framework 4.6.2. Den nya 64-bitars kompilatorn som ingår i .NET Framework 4.6.2 åtgärdar vart och ett av dessa kända problem.
Kontrollera att din version av Windows är uppdaterad genom att köra Windows Update. Tjänstuppdateringar till .NET Framework 4.6 och 4.6.1 löser vart och ett av dessa problem förutom NullReferenceException i en unboxing-åtgärd.
Kompilera med den äldre 64-bitars JIT-kompilatorn. Mer information om hur du gör detta finns i avsnittet Åtgärda andra problem .
Åtgärd av andra problem
Om du stöter på någon annan skillnad i beteende mellan kod som kompilerats med den äldre 64-bitars kompilatorn och den nya 64-bitars JIT-kompilatorn, eller mellan felsöknings- och versionsversionerna av din app som båda kompileras med den nya 64-bitars JIT-kompilatorn, kan du göra följande för att kompilera din app med den äldre 64-bitars JIT-kompilatorn:
Per program kan du lägga till elementet <useLegacyJit> i programmets konfigurationsfil. Följande inaktiverar kompilering med den nya 64-bitars JIT-kompilatorn och använder i stället den äldre 64-bitars JIT-kompilatorn.
<?xml version ="1.0"?> <configuration> <runtime> <useLegacyJit enabled="1" /> </runtime> </configuration>Per användare kan du lägga till ett
REG_DWORDvärde med namnetuseLegacyJittillHKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFrameworkregistrets nyckel. Värdet 1 aktiverar den äldre 64-bitars JIT-kompilatorn. värdet 0 inaktiverar det och aktiverar den nya 64-bitars JIT-kompilatorn.Per dator kan du lägga till ett
REG_DWORDvärde med namnetuseLegacyJittillHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFrameworknyckeln i registret. Värdet 1 aktiverar den äldre 64-bitars JIT-kompilatorn. värdet 0 inaktiverar det och aktiverar den nya 64-bitars JIT-kompilatorn.
Du kan också meddela oss om problemet genom att rapportera en bugg på Microsoft Connect.