gpt4 book ai didi

c# - 在 .NET 中为方法和线程计时

转载 作者:行者123 更新时间:2023-11-30 17:23:11 24 4
gpt4 key购买 nike

我的应用程序中有两个线程 - 主 UI 线程和另一个由 wm_WiiMoteChanged 事件处理程序启动的线程(后台线程)。在主线程中我做了一些视频处理。我有一个名为 processFrame 的函数如下所示。我使用该代码来测量处理每一帧的时间,从而测量每秒的帧数。

如果我注释掉 wm.WiiMoteChanged ...线(见下文),帧速率约为 15-20 fps,看视频,这似乎是正确的(有一点延迟)。

但是当我取消注释该行时,即添加事件处理程序(它将自己生成一个线程)时,fps 上升到 40-50,但这绝对是错误的——视频实际上更慢。

有人可以向我解释为什么会这样吗?谢谢。

private void Main_Load(object sender, EventArgs e)
{
try
{
wm.Connect();
//wm.WiimoteChanged += wm_WiimoteChanged;

wm.SetReportType(InputReport.IRAccel, true);
wm.SetLEDs(false, false, false, true);
}
catch (Exception x)
{
MessageBox.Show("Exception: " + x.Message);
this.Close();
}
}

更多代码:

private void processFrame(object sender, EventArgs e)
{
DateTime curr = DateTime.Now;
performOperation();
TimeSpan currTime = DateTime.Now - curr;
lblFPS.Text = (1000 / currTime.Milliseconds).ToString() + " fps";
}

编辑

一个有趣的发现,只有当这一行出现在 wm_WiimoteChanged 中时,才会发生这种情况。

ibxOutput.Image = new Image<Bgr, Byte>(_irViewAreaBitmap);

旁注:这条线也是导致延迟较高的原因 - 在设置它之前完成的处理实际上很快!

最佳答案

因为通过添加事件处理程序,您正在响应那些 WiimoteChanged 事件并运行额外的代码。

处理程序是否包含锁定?建议您发布 wm_WiimoteChanged()

的代码

更新:建议您使用 System.Diagnostics.Stopwatch 而不是 DateTime.Now DateTime.Now 可能不够准确。

关于c# - 在 .NET 中为方法和线程计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2309033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com