F#の配列を反復する最速の方法は何ですか? Array。[index]を使用すると、(リリースモードでアセンブリープロダクトを見て)asm命令を呼び出すように見えます。 これを回避する方法はありますか? おかげ F#の配列トラバーサル
120: me.[i] <- me.[i] ||| you.[i]
0000005b 8B 45 F8 mov eax,dword ptr [ebp-8]
0000005e 8B 55 E0 mov edx,dword ptr [ebp-20h]
00000061 3B 42 04 cmp eax,dword ptr [edx+4]
00000064 72 05 jb 0000006B
00000066 E8 35 CD B9 65 call 65B9CDA0
0000006b 8B 4C C2 08 mov ecx,dword ptr [edx+eax*8+8]
0000006f 8B 5C C2 0C mov ebx,dword ptr [edx+eax*8+0Ch]
00000073 8B 45 F8 mov eax,dword ptr [ebp-8]
00000076 8B 55 DC mov edx,dword ptr [ebp-24h]
00000079 3B 42 04 cmp eax,dword ptr [edx+4]
0000007c 72 05 jb 00000083
0000007e E8 1D CD B9 65 call 65B9CDA0
00000083 0B 4C C2 08 or ecx,dword ptr [edx+eax*8+8]
00000087 0B 5C C2 0C or ebx,dword ptr [edx+eax*8+0Ch]
0000008b 89 4D EC mov dword ptr [ebp-14h],ecx
0000008e 89 5D F0 mov dword ptr [ebp-10h],ebx
00000091 8B 45 F8 mov eax,dword ptr [ebp-8]
00000094 8B 55 E0 mov edx,dword ptr [ebp-20h]
00000097 3B 42 04 cmp eax,dword ptr [edx+4]
0000009a 72 05 jb 000000A1
0000009c E8 FF CC B9 65 call 65B9CDA0
000000a1 8B 4D EC mov ecx,dword ptr [ebp-14h]
000000a4 8B 5D F0 mov ebx,dword ptr [ebp-10h]
000000a7 89 4C C2 08 mov dword ptr [edx+eax*8+8],ecx
000000ab 89 5C C2 0C mov dword ptr [edx+eax*8+0Ch],ebx
更新
:Array.iterは私を与える使用して:122: me |> Array.iteri (fun i elem -> me.[i] <- me.[i] ||| you.[i])
0000003a B9 18 26 70 00 mov ecx,702618h
0000003f E8 7C 53 A5 FF call FFA553C0
00000044 89 45 E0 mov dword ptr [ebp-20h],eax
00000047 FF 75 E4 push dword ptr [ebp-1Ch]
0000004a 8B 55 E8 mov edx,dword ptr [ebp-18h]
0000004d 8B 4D E0 mov ecx,dword ptr [ebp-20h]
00000050 FF 15 00 26 70 00 call dword ptr ds:[00702600h]
00000056 8B 55 E8 mov edx,dword ptr [ebp-18h]
00000059 8B 4D E0 mov ecx,dword ptr [ebp-20h]
0000005c 8B 05 DC 27 70 00 mov eax,dword ptr ds:[007027DCh]
00000062 6A 00 push 0
00000064 6A 00 push 0
00000066 6A 01 push 1
00000068 50 push eax
00000069 83 3D 88 A2 63 66 00 cmp dword ptr ds:[6663A288h],0
00000070 74 09 je 0000007B
00000072 51 push ecx
00000073 52 push edx
00000074 E8 C2 DE C1 65 call 65C1DF3B
00000079 5A pop edx
0000007a 59 pop ecx
0000007b E8 A7 5C 96 65 call 65965D27
00000080 CC int 3
私は試しましたが、同じasmコードを取得します。デバッガをどのように非アクティブ化するかを詳しく説明してください。 – GreyGeek
リリースでプログラムをコンパイルしてから実行します(Visual Studioではf5の代わりにctrl + f5を使用します) – desco