1

我有一个系统,它按文件上传到服务器文件并显示文件上传进度的进度条,然后在第二个进度条下方,我想指示所有排队上传的文件的批处理完成百分比。

我可以计算出的信息和算法是:

发送的字节数/要发送的总字节数 = 第一个进度条(例如 1024KB 的 512KB (50%))

这很好用。但是,假设我还有另外两个文件要上传,但两个文件的大小都是未知的(因为这只有在文件即将开始上传时才知道,此时它被压缩并确定文件大小)我将如何去做我的第三个进度条?

我不认为这是可能的,因为我需要“发送的总字节数”/“要发送的总字节数”,以更大规模地复制我的第一个进度条的逻辑,但是我确实得到了一个工作版本:“当前我们正在打开的文件号”/“要发送的文件总数”通过批处理返回百分比,但显然不会增量更新,而且非常粗糙。

因此,进一步思考,我想如果我可以将当​​前文件 % 与这个算法结合起来,我也许可以得到我批次当前点的正确进度百分比。

我试过这个算法,但是没有用(对不起任何数学头脑,很明显为什么它不起作用)

("Current file number we are on" / "total number of files to send") * ("Bytes Sent" / "Total Bytes To Send")

例如,在使用此示例进行测试时,我认为我在正确的轨道上:2/3(第 3 个文件的第 2 个)= 66%(到目前为止这是正确的)但是当我添加 * 0.20(仅表示第 2 个的 20%文件已上传)我们又回到了 13%。我只需要33%多一点!我确实在 0.80 和 (2/3 * (2/3 * 0.2))

这可以在不知道要批量上传的整个字节的情况下完成吗?

请帮忙!谢谢!

4

3 回答 3

1

如果您不知道其他排队的文件有多大,则无法准确显示与所需时间相关且成比例的百分比值。

想到了一些解决方法:

  • 一种看起来像您知道但实际上欺骗用户的方法是假设所有排队的文件与正在处理的文件大小相同,或者是到目前为止处理的文件的平均值。基于此,如果所有文件确实大小相同,进度条将显示“真相”,如果大小差异很大,进度条将非常偏离。

  • 另一种方法是让您的第二个进度条不显示传输的字节百分比,而是显示文件的百分比。因此,如果您有 4 个文件,则该条将从 0 到 25% 到 50% 到 75% 到 100% 跳跃。它不能准确反映所花费的时间,但至少你不会撒谎。

  • 使用 Microsoft 的方法可以做得更糟:让进度条的增长在接近 100% 时逐渐变慢,这样它就永远不会真正到达终点。用户看到的只是不断接近“几乎完成”的值。这样的显示看起来很酷,但实际上给用户的信息最少。

于 2010-03-17T09:57:54.630 回答
1

正如@Carl 所观察到的,在不知道还有多少要发送的情况下,您无法对已发送的比例进行真实估计。暂时搁置科学准确性和完整性,您的计算:

("Current file number we are on" / "total number of files to send") * 
("Bytes Sent" / "Total Bytes To Send")

应该扩展以包含文件分数的想法。例如,如果您发送了 11 个文件中的 6 个文件和第 7 个文件的 30%,那么您需要计算

(6.3 / 11) * ("Bytes Sent" / "Total Bytes To Send")

沿着这条线的某处,您将发送的文件数乘以已发送的当前文件的比例,即您计算出0.66*0.2=0.13的,而不是加上当前文件的比例。

再次拾起科学的准确性和完整性,为什么不在第二个进度条上使用传输速率呢?如果你在一个合理的时期内整合它,它应该给观察者一种令人满意的感觉,即某事正在发生并且正在取得进展。

于 2010-03-17T10:17:47.673 回答
0

哦,天哪,我没有考虑最简单的方法:

(double)((ProcessedFileCount + DecimalBytesTransferred) / TotalFileCount)

(其中 processesFileCount 始终表示完全传输和完整的文件)

并在 3 个文件批次上证明测试用例:

Eg. ((2 + 1.0) / 3) (File 1+2+3: 100%) == batch 100% complete.
Eg. ((2 + 0.9) / 3) (File 1+2: 100%, File 3: 90%) == batch 96% complete.
Eg. ((1 + 0.9) / 3) (File 1: 100%, File 2: 90%) == only 63% complete.

工作一种享受!感谢您的意见,尽管伙计们我会考虑所有外部建议。

于 2010-03-17T11:05:08.753 回答