首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >记录线程所花费的时间

记录线程所花费的时间
EN

Stack Overflow用户
提问于 2014-01-29 07:59:44
回答 2查看 768关注 0票数 0

我有一段代码,它生成6个线程,并在每个线程上同时执行GetAverage方法。

代码语言:javascript
运行
复制
 var threadFinishEvents = new List<EventWaitHandle>();
 //StopWatch sw = new StopWatch();
 for (int i = 0; i < 6; i++)
 {
      var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset);
      threadFinishEvents.Add(threadFinish);
      var thread = new Thread(delegate()
                            {
                                GetAverage(userName);
                                threadFinish.Set();
                                //sw.Stop();
                            });
              //sw.Start();
              thread.Start();
 }
 Mutex.WaitAll(threadFinishEvents.ToArray(), threadTimeout);
 long timeElapsed = sw.TimeElapsed();

我希望记录每个线程执行所需的时间,并将其记录到数据库中。我在谷歌上读了很多建议使用Stopwatch的文章。我尝试将Stopwatch代码(我已经注释掉)添加到代码片段中,但不确定这是否正确。有人能帮帮我吗?

EN

Stack Overflow用户

发布于 2014-01-29 09:04:58

测量平均时间有两种可能性:测量总时间并将其除以一个或多个线程,或度量每个线程时间,将其加和并除以数字(但在这种情况下,您可以使用所谓的移动平均,在获得最后一个线程时间之前就可用了)。哪一种-看情况而定。

测量总时间

代码语言:javascript
运行
复制
var watch = new StopWatch();
watch.Start();
// .. whole job, creating N threads, waiting for all of them to finish
watch.Stop();
var result = watch.Elapsed / N;

它将包括开销(循环时间、创建线程、执行第一个线程等),但是运行的线程越多,就越精确。

测量每个线程时间

代码语言:javascript
运行
复制
//  inside each thread
var watch = new StopWatch();
watch.Start();
// ... thread job
watch.Stop();
timeX = watch.Elapsed;

// after job is done
Mutex.Wait...
result = (time1 + time2 + ... ) / N;

你不包括任何开销,最准确的结果。但是你必须保留所有的timeX

移动平均时间

代码语言:javascript
运行
复制
//  inside each thread
var watch = new StopWatch();
watch.Start();
// ... thread job
watch.Stop();
result = (_timePrevious + watch.Elapsed) / 2;
_timePrevious = watch.Elapsed;

// after job done
result = result; // total result is the same as the most recent

在这里,我们只使用两个度量(由于未初始化的resultresult的第一个值将是不准确的),但它可能更多。您可以有一个动态列表来保存所有时间(这使得结果在结尾时最准确),或者,例如,固定的具有移动位置的数组(通过第一次测量来填充,然后由新线程更新)。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21425254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档