c语言获取三维数组纬度,C#遍历三维数组的最快维度

这篇博客探讨了在C#中数组遍历的两种方式——行优先(XYZ)和列优先(XZY)——的性能差异。通过基准测试发现,尽管理论上行优先可能因缓存优化而更快,但在实际应用中,这种差异可能并不显著,建议根据具体场景和硬件进行基准测试以确定最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

匿名用户

您可以自己对其进行基准测试,例如:public class Traversal

{

public static int[,,] stuff = new int[20,240,20];

[Benchmark]

public int[,,] XYZ()

{

var result = new int [20, 240, 20];

for (byte x = 0; x < 20; x++)

for (byte y = 0; y < 240; y++)

for (byte z = 0; z < 20; z++)

{

result[x, y, z] = stuff[x, y, z];

}

return result;

}

[Benchmark]

public int[,,] XZY()

{

var result = new int [20, 240, 20];

for (byte x = 0; x < 20; x++)

for (byte z = 0; z < 20; z++)

for (byte y = 0; y < 240; y++)

{

result[x, y, z] = stuff[x, y, z];

}

return result;

}

}

BenchmarkRunner.Run();

在我的计算机上,它给出了下一个结果:| Method | Mean | Error | StdDev |

|------- |---------:|---------:|---------:|

| XYZ | 412.4 us | 9.73 us | 27.92 us |

| XZY | 429.0 us | 11.48 us | 33.50 us |

如CLI spec spec所述:

数组元素应在数组对象内按主要行顺序排列(即,与最右边数组维度相关联的元素应从最低到最高索引连续排列)。 为每个数组元素分配的实际存储可以包括特定于平台的填充。

因此,通常情况下,由于CPU缓存和可能的一些优化,按行处理项的速度应该更快(尤其是如果您将值类型存储在数组中),但对于大多数日常场景,改进应该很小,并且一如既往--首先对具体案例(和具体硬件)进行基准测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值