在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
在Release中編譯程序,然後運行它(使用Visual Studio - 使用ctrl + f5而不是f5) – desco