是否有更快的方式来循环数千个项目?

时间:2012-02-06 05:27:17

标签: c# loops bytearray

假设我有一个包含100,000个字节的字节数组。我想将每个字节转换为其自身的文本表示。例如:

byte[] b = new byte[55000];

for(int i = 0; i < b.Length; i++)
{
Console.WriteLine(ConvertToString(b[i]));
}

上面的代码需要大约35秒才能完成,是否有某种方法可以将其缩短到5秒左右?

3 个答案:

答案 0 :(得分:4)

正如我在评论中提到的,我建议删除Console.WriteLine()方法。我还建议在循环中避免它。通常,如果要查看正在处理的内容,可以使用Debug.WriteLine()MSDN)或设置断点(如果您的特定情况不正常,则甚至是条件断点)。如果你需要再次返回数据,我会建议使用字符串生成器:

byte[] b = new byte[55000];
StringBuilder myStringBuilder = new StringBuilder();

for(int i = 0; i < b.Length; i++)
{
    myStringBuilder.AppendLine(ConvertToString(b[i]));
}
Console.Write(myStringBuilder.ToString());

答案 1 :(得分:3)

我喜欢写一个Parallel.For Loop,可能比现在更快......

    static void Main()
    {
        int[] nums = Enumerable.Range(0, 1000000).ToArray();
        long total = 0;

        // Use type parameter to make subtotal a long, not an int
        Parallel.For<long>(0, nums.Length, () => 0, (j, loop, subtotal) =>
        {
            subtotal += nums[j];
            return subtotal;
        },
            (x) => Interlocked.Add(ref total, x)
        );

        Console.WriteLine("The total is {0}", total);
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }

答案 2 :(得分:-1)

对您的代码进行概要分析,以了解哪种方法花费的时间最多。将优化工作集中在该方法上。