用什麼算法來計算函數調用的進度?用於報告異步函數調用進度的算法
顯然它很容易,如果你有一個循環做的,是這樣的:
Action<Double> notifier = d => Console.WriteLine("Completed: " + d.ToString());
Double _interval = 0.05;
for (int i = 0; i < 1000; i++)
{
int rem = default(int);
Math.DivRem(i, _interval, out rem);
if (rem == 0)
{
double progress = (double)i/1000;
notifier(progress);
}
}
可是你知道,當你只是有一些通用的委託,你想異步運行,但也通知的另一個線程它的進步,你不能保證你可以直接使用for循環?其他一些簡單的方法可能是:
1)時間的函數第一(很業績但如果它是一個長期運行的任務)
2)店鋪過去在日誌功能的時機不好,並使用(但這並不一定會考慮額外的變量 - 在任務的特定時間的CPU,內存等)
但是,是否存在更高級的算法,即使只是爲了近似進度?
如果你可以存儲過去的時間,那是最好的辦法。 CPU和內存是你可能會忍受的限制。過去的時機是未來表現的最好指標 –