c# – Thread.Sleep(n)的使用是否会导致性能问题?

c# – Thread.Sleep(n)的使用是否会导致性能问题?,第1张

概述我正在为我的项目使用Thread.Sleep(n).我听说Thread.Sleep会导致性能问题但不确定. 我的要求是: Wait for 5 minute increments, up to 30 minutes (6 times the 5 minute delay). After this, begin to increment by 1 hour and do this 5 times ( 我正在为我的项目使用Thread.Sleep(n).我听说Thread.Sleep会导致性能问题但不确定.

我的要求是:

Wait for 5 minute increments,up to 30 minutes (6 times the 5 minute
delay). After this,begin to increment by 1 hour and do this 5 times
(additional 5 hours).

下面我提供了我在不同场景中使用Thread.Sleep(n)的示例代码:

Thread.Sleep(1000 * 60 * 5); //-------waiting for 5 minutesvar isDownloaded = false;try{    var attempt = 0;    while (attempt < 11)    {        isDownloaded = TryDownloading(strPathTodownload,strfileTodownload);        if (isDownloaded)            break;        attempt++;        if (attempt < 6)            Thread.Sleep(1000 * 60 * 5); //--------waiting for 5 minutes        else        {            if (attempt < 11)                Thread.Sleep(1000 * 60 * 60); //-------waiting for 1 hour            else                break;        }    }}

在上面的代码我试图下载最多11次下载尝试的文件.最初它等待5分钟,然后尝试下载第一次尝试的文件,如果失败,则尝试接下来的5次尝试,每次尝试间隔5分钟.如果他们在前六次尝试中失败,则接下来的5次尝试,每次尝试间隔1小时.

所以我们决定在我们的控制台应用程序中使用Thread.Sleep来延迟时间.

这会导致任何问题或性能问题吗?

如果Thread.Sleep(n)导致性能问题,那么这将是一种更好的替代方式,而不是使用Thread.Sleep(n)?

最后,MSDN是否建议Thread.Sleep(n)有害或不应该使用?

解决方法 这绝对没问题.以下是睡眠费用:

>你保持一个线程占用.这需要一点点记忆.
>设置 *** 作系统内部的等待.那是O(1).睡眠的持续时间无关紧要.这是一个小而不变的成本.

就这样.

然而,糟糕的是忙于等待或进行轮询循环,因为这会导致实际的cpu使用率.只是在睡眠或等待中花费时间不会产生cpu使用率.

TL; DR:使用睡眠进行延迟,不要使用睡眠进行轮询.

我必须说,对睡眠的厌恶有时只是训练有素的反射.在谴责睡眠之前,一定要分析具体的用例.

总结

以上是内存溢出为你收集整理的c# – Thread.Sleep(n)的使用是否会导致性能问题?全部内容,希望文章能够帮你解决c# – Thread.Sleep(n)的使用是否会导致性能问题?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存