私は小さな構造を持っており、個々のメンバーをコピーすることは、構造を一度にコピーするよりも大幅に高速であることが分かりました。これには正当な理由はありますか?個々のメンバーを構造全体より速くコピーしますか?
私のプログラム:
// Some random structure
private struct PackStats
{
public int nGoodPacks, nBadPacks, nTotalPacks;
}
// ...
PackStats stats1 = new PackStats();
PackStats stats2 = new PackStats();
// Set some random statistics
stats1.nGoodPacks = 55;
stats1.nBadPacks = 3;
stats1.nTotalPacks = (stats1.nGoodPacks + stats1.nBadPacks);
// Now assign stats2 from stats1
// This single line consumes ~190ns...
stats2 = stats1;
// ...but these three lines consume ~100ns (in total)
stats2.nGoodPacks = stats1.nGoodPacks;
stats2.nBadPacks = stats1.nBadPacks;
stats2.nTotalPacks = stats1.nTotalPacks;
ナノ秒の範囲で時間を測定するために、私は倍の割り当ての何百万を作る:
uint uStart = GetTickCount();
for (int nLoop=0; nLoop<10000000; nLoop++)
{
// Do something...
}
uint uElapsed = (GetTickCount() - uStart);
結果は、最適化が有効と無効の両方で、ほぼ一致しました。..この小さな構造の個々のメンバーをコピーすることは約2倍速かった。同じ結果がC/C++にも当てはまりますか?
ILコードの検査についてのコメントがありました。それをどうやって行うかわからず、方法を研究します。説明が簡単な場合は、コメントで返信してください。 – AlainD
http://stackoverflow.com/q/9025186/11683 – GSerg
anycpu用にコンパイルされた64ビットCPU、 –