3

ループで直接使用するのではなく、最初にオブジェクト プロパティを変数に割り当てる方がよいでしょうか?

ビットマップが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 値に直接アクセスできるため、高速になります。これは正しいです?

4

1 に答える 1

2

はい。プロパティがどれほど単純であっても、アクセスには関数呼び出しのオーバーヘッドがあります。特に何かを 200 万回実行している場合は、変数の方が高速です。

于 2012-05-02T00:54:43.093 に答える