1

私は64ビットシステムを持っています。コードがより高速に実行されることを期待して、変数を 64 ビット変数として宣言しています。「String.IndexOf("J", X)」などの関数を実行すると、X が Long であるため失敗しますが、32開始インデックスとしてのビット値。

32 ビットに変換せずに 64 ビット変数を渡す方法はありますか?

4

1 に答える 1

3

あなたは 64 ビット コードについて間違った考えを持っています。String.IndexOf() メソッドへの引数は変更されません。2 番目の引数は引き続き整数です。サイズを変更する .NET の唯一の型は IntPtr です。

これはすべて設計によるものです。64 ビット プロセッサで 64 ビット整数値を操作しても、コードの実行速度は速くなりません。それどころか、実行速度が遅くなります。プロセッサの速度は、キャッシュのサイズによって大きく制限されます。CPU キャッシュは、プロセッサが RAM からデータを読み書きする必要がないようにするために重要です。これは、プロセッサの速度に比べて非常に遅いです。L1、L2、または L3 キャッシュにデータがない場合の最悪の場合のプロセッサ ストールは、200 サイクルになる可能性があります。

キャッシュサイズは固定です。64 ビット変数を使用すると、キャッシュの効果が半分になります。

また、Long および Option Strict Off を使用して、コードを遅くします。これには、コンパイラが Long を Integer にキャストする変換を発行する必要があります。コードには表示されませんが、確かに実行されます。ildasm.exe または ILSpy や Reflector などの逆コンパイラを使用して IL を表示すると、確認できます。

于 2012-12-19T21:30:00.453 に答える