首页 > 解决方案 > C# 是否将结构数组分配为内存中的数组结构?

问题描述

我想知道在编写 c# 时这两种结构在内存中是否有任何区别?

我举了一个例子,两种结构都以相同的速度运行。

        for (int i = 0; i < iterations; i++)
        {
            enArr[i].h = random.Next(0, 1000);
            enArr[i].w = random.Next(0, 1000);

            enArr[i].sum = Math.Sqrt(enArr[i].h)
                + Math.Sqrt(enArr[i].w);

            Console.WriteLine($"AoS Sqr[{i}]: {enArr[i].sum}");
        }

对比

        for (int i = 0; i < iterations; i++)
        {
            entities.h[i] = random.Next(0, 1000);
            entities.w[i] = random.Next(0, 1000);

            entities.sum[i] = Math.Sqrt(entities.h[i])
                + Math.Sqrt(entities.w[i]);
            Console.WriteLine($"SoA Sqr[{i}]: {entities.sum[i]}");
        }

我预计最后一个会更快,因为 SoA 提供了连续的数据布局,但执行完全相同。

标签: c#performancecompiler-optimization

解决方案


推荐阅读