我一直想知道所有具有进度条的程序如何几乎准确地知道完成操作(以及程序工作的整个处理)所需的时间,从而能够将其与进度条进行映射。
在 C# 中,我在处理进度条时总是会遇到困难。我得出的结论是,没有通用的解决方案,是吗?
我不是在问这个:
“例如:你怎么知道File.ReadAllBytes(path)
读取一个文件需要多少时间?简单,在它之前启动一个秒表,然后停止并读取它之后的时间。但这只是在你的计算机上,在你的 CPU 上,在你的磁盘上!- 1MB的读数会和你的机器和其他的大多不同”
我在问我怎么知道一件事在进入它之前需要多长时间才能完成?我的意思是,我必须知道在执行之前需要多少时间File.ReadAllBytes()
,以便进度条可以在方法执行期间相应地步进。
一种愚蠢的做法是做两次!开始运行,计算时间,然后再次运行,但这次你踩了进度条(lol)
我不知道复杂性是否与此有关。我在编写自己的方法和函数时使用 big-O,而不是在处理预定义函数时。
编辑:只是一个例子:我制作了一个异或文件并用异或形式覆盖它的程序。现在这涉及 1-将文件的字节读取到字节数组。对它们进行 2 异或运算。3-将它们再次写回文件。现在如果我想使用进度条,我怎样才能知道这些操作需要多少时间,以便我可以相应地增加进度条?
我对此的解决方案是使用一个全局变量(如 prgBar),将 XORing 分配给一个单独的线程,并且每次我从我从文件中读取的字节数组中异或一个字节时,在该线程中递增“prgBar”,然后在主线程中,我使用了一个计时器,我所做的每个滴答声:prgressBar.Value = prgBar
我遇到了这个问题,它甚至不准确,它可能开始晚了。