相关疑难解决方法(0)

为什么.NET中的多维数组比普通数组慢?

编辑:我向大家道歉.我实际上想要说"多维数组"时使用了"锯齿状数组"一词(如下面的例子所示).我为使用错误的名字道歉.我实际上发现锯齿状阵列比多维阵列更快!我已经为锯齿状阵列添加了测量值.

我试图用一个 盘陀今天的多维数组,当我注意到它的性能并不像我预期的那样.使用单维数组和手动计算索引要比使用2D数组快得多(几乎两倍).我使用1024*1024数组(初始化为随机值)编写了一个测试 ,进行了1000次迭代,我在我的机器上得到了以下结果:

sum(double[], int): 2738 ms (100%)
sum(double[,]):     5019 ms (183%)
sum(double[][]):    2540 ms ( 93%)
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

public static double sum(double[] d, int l1) {
    // assuming the array is rectangular
    double sum = 0;
    int l2 = d.Length / l1;
    for (int i = 0; i < l1; ++i)
        for (int j = 0; j < l2; ++j)
            sum += d[i * l2 + j];
    return sum;
}

public static double sum(double[,] d) …
Run Code Online (Sandbox Code Playgroud)

.net arrays performance

49
推荐指数
3
解决办法
2万
查看次数

为什么数组大小声明使用"1"作为第一个索引?

关于C#/ Java,我注意到的一点似乎是(对我来说)数组大小声明和数组大小的默认第一索引的不一致问题.

使用数组时,假设您要创建一个新的整数数组大小3,它将如下所示:

int[] newArray = new int[3] {1, 2, 3};

完全找到并且可读......对吗?

编程语言的标准似乎要求"第一"指数0.

使用该逻辑,如果我有兴趣创建一个大小的数组3,我应该写这个:

int[] newArray = new int[2] {1, 2, 3};

等一下...... VS正在抛出一个错误,说道an array initialize of length 2 is expected.

因此循环数组和数组大小声明的第一个索引是不一致的?前者使用0基于第一的索引,第二1个使用第a 个索引.

这不是任何形式或方式的游戏破坏/改变,但我真的好奇为什么这里存在差异,或者地狱,如果这甚至是一个问题(就像我说的那样,它不会以任何方式破坏游戏,但我很好奇为什么这样做了).

我现在可以想到为什么1使用基于索引的原因:

在for循环中,您将使用< newArray.Length而不是< newArray.Length - 1< newArray.Length.

使用Lists一段时间,然后回到size-needs-be-declared-arrays阵列让我有些措手不及.

c# java arrays

4
推荐指数
2
解决办法
282
查看次数

标签 统计

arrays ×2

.net ×1

c# ×1

java ×1

performance ×1