我需要一些关于c#中方法中哪些提供的样式会更好使用(更有效)的建议

本文关键字:更好 有效 样式 方法 | 更新日期: 2023-09-27 17:49:14

我正在用c#创建一个库,我希望这个库尽可能高效。这是我开发的两种风格,我想知道是否一种比另一种更快,如果是,为什么?或者它们是否具有相同的效果。

风格1

Object[] row;
while (sqlDataReader.Read())
{
    row = new Object[sqlDataReader.FieldCount];
    for (int i = 0; i < row.Length; i++)
        row[i] = sqlDataReader[i];
    databaseResults.Add(row);
}

方式2:

while (sqlDataReader.Read())
{
    Object[] row; = new Object[sqlDataReader.FieldCount];
    for (int i = 0; i < row.Length; i++)
        row[i] = sqlDataReader[i];
    databaseResults.Add(row);
}

我需要一些关于c#中方法中哪些提供的样式会更好使用(更有效)的建议

毫无疑问,它们将具有相同的性能。第一种风格可能会保留对行的引用,这取决于你在while循环之后做什么,所以如果你不打算在之后使用row,我会使用样式2。

它们都将以相同的速度运行,因为声明Object[] row不会消耗显著的(任何?)CPU时间。具体来说,无论在循环内还是在循环外声明它都不会占用更多的时间。声明它的地方只会控制范围,而垃圾收集器的行为都是一样的。

在c#中,当变量仅在循环内使用时,在循环内或循环外声明变量(通常是*)在编译后的代码中没有区别。优化器将使它们相同,因为它们的行为相同。

*当变量在匿名方法中被捕获时例外。当这种情况发生时,声明作用域就会影响程序的意义。每次循环执行时,都会创建在循环内部声明的捕获变量的新实例,而在循环外部声明的变量将在所有迭代中重用。

由于所指示的代码中没有匿名方法,因此不适用此例外。