我正在测试将二进制转换为字符串所需的速度,以确定它是否会成为瓶颈。问题是,控制台窗口的完成时间比计时器建议要长......
简单地说,应用程序运行大约需要10秒钟(GUI正在更新大约4-5秒,并且更新发生在计时器启动和计时器停止调用内)但它总是显示它只需要大约1秒钟。
这是要复制的完整代码
class Program
{
static List<int[]> binary = new List<int[]>();
static void Main()
{
for (int i = 0; i < 5000; i++)
{
Add(); //creates the list to convert. I don't need to time this as it's only populating the list
}
Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine("start");
foreach (var item in binary)
{
var h = item;
int result = 0;
int bitValue = 1;
for (int i = h.Length - 1; i >= 0; i--)
{
result += h[i] * bitValue;
bitValue *= 2;
}
Console.WriteLine((char)result);
}
sw.Stop();
Console.WriteLine("Done in " + new TimeSpan(sw.ElapsedTicks).TotalSeconds);
Console.ReadKey();
}
private static void Add()
{
binary.Add(new int[] { 0, 1, 0, 1, 0, 0, 1, 1 });
binary.Add(new int[] { 0, 1, 0, 1, 0, 1, 0, 0 });
binary.Add(new int[] { 0, 1, 0, 1, 0, 0, 1, 0 });
binary.Add(new int[] { 1, 1, 0, 1, 0, 0, 1, 1 });
binary.Add(new int[] { 1, 1, 0, 1, 0, 0, 1, 1 });
}
当我可以计算GUI完成更新所需的时间(4-5秒)时,为什么计时器显示1秒? Console.WriteLine在计时器内部,我不相信它以异步方式发送到屏幕,但它似乎是以这种方式表现?
答案 0 :(得分:0)
因为在运行Add()操作5000次后启动秒表......这需要时间。