【问题标题】:what is the fastest way to transfer items from an array? [duplicate]从数组中传输项目的最快方法是什么? [复制]
【发布时间】:2018-02-24 19:32:35
【问题描述】:

不确定我是否正确地表达了标题,但说我有一个方法,例如:

public static string[] ByteArrayToStringArray(byte[] buffer)
{
      //code here
}

这样做会更好

List<string> list = new List<string>();

for (int i = 0; i < buffer.Length; i++)
{
    list.Add(buffer[i].ToString());
}
return list.ToArray();

或者这样做会更好

List<string> list = new List<string>();

foreach (byte b in buffer)
{
    list.Add(b.ToString());
}
return list.ToArray();

哪个更快或者它们之间没有区别?

【问题讨论】:

  • 或者你可以这样做:buffer.Select(b =&gt; b.ToString()).ToArray();.
  • 你真的想把每一个字节都转换成一个字符串吗?我猜想整个转换计算将占用如此多的总时间,以至于 for 循环与 foreach 循环几乎没有任何区别……

标签: c# arrays


【解决方案1】:

this question 中所述,使用 for 循环迭代数组比使用 foreach 便宜。

您也可以通过省略该列表来改进您的代码。只需在之前创建数组并在循环期间设置字符串项。这是改进的版本:

public static string[] ByteArrayToStringArray(byte[] buffer)
{
    string[] ret = new string[buffer.Length];
    for (int i = 0; i < buffer.Length; i++)
    {
        ret[i] = buffer[i].ToString();
    }
    return ret;
}

请注意,还有非常紧凑的 LINQ 选项,例如

buffer.Select(c => c.ToString()).ToArray();

但 LINQ 查询在性能方面并不是最好的。

编辑: 参考下面在 cmets 与 Gusman 的讨论,可以通过使用 while 循环进一步提高性能。

【讨论】:

  • 如果您正在优化以区分forforeach,那么说while 循环比for 循环更快也是合理的。跨度>
  • 我不这么认为。使用 while 循环循环数组并不快。查看cc.davelozinski.com/c-sharp/for-vs-foreach-vs-while
  • 不错的测试,但没有测试while循环,检查代码。
  • 结果在帖子的第一个表中。
  • 是的,有结果,但测试代码不包含任何测试代码,这就是我的意思,所以所有数据都是垃圾。
猜你喜欢
  • 2012-09-28
  • 2010-10-08
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多