オブジェクトプロパティをループ内で直接使用するのではなく、まず変数に割り当てる方が良いですか?ループ内のオブジェクトプロパティへのアクセス
私はビットマップBitmap img = new Bitmap("image.jpg")
を持っていると言いますが、何らかの処理を行うにはすべてのピクセルをループする必要がありました。約200万画素の1080p画像の場合。 data.Stride
を使用するか、最初に変数に割り当てる場合は重要ですかint dataStride = data.Stride
?私はオフセットを計算するたびにそれにアクセスする必要がありますが、dataStrideはイメージの定数です。
data = editImage.LockBits(new Rectangle(0, 0, editWidth, editHeight), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
byte* dataPtr = (byte*)data.Scan0;
dataStride = data.Stride;
私はそれが最初のオブジェクト(たび)にアクセスし、次に遅いオブジェクト(各回)の整数にアクセスしなければならないことを考えていますので、私は最初の変数に割り当てます。そしてそれは大きなループなので...それは合体する。したがって、最初に変数にプロパティを割り当てることは、int値に直接アクセスできるため、高速になります。これは正しいです?
System.Diagnostics.StopWatchまたはProfilerを使用して、両方の方法で記述し、リリースモードでの複数回の実行でパフォーマンスを測定します。誰かがバイトポインタに対して実際にそれを測定しない限り、どちらかが速いかもしれないコーナーケースがたくさんありますが、汎用情報はそれほど有用ではありません。 –