关于QueueUserWorkItem()的调用,我的探查器中出现间歇性尖峰。我每秒大约要排队20个工作。就复杂性而言,每个作业大致相同。 95%的作业在调用QueueUserWorkItem上花费的时间少于0.01ms。但是每隔几秒钟,看似随机的,一项工作就将花费20-60毫秒!
我试图建立一个平滑的模拟,只是排队我的后台任务会导致帧速率严重下降。
这不是实际完成工作所花费的时间,而是简单地排队工作所花费的时间。我希望几乎不需要任何时间,因此这非常令人沮丧。
foreach ( Job j in jobs_to_process )
{
Job current_job = j;
if ( !current_job.queued )
{
current_job.queued = true;
Profiler.BeginSample("QueueWorkItem");
ThreadPool.UnsafeQueueUserWorkItem( current_job.DoCalculation, null );
Profiler.EndSample();
}
}
//now I remove queued items from jobs_to_process, move them to jobs_in_progress list
我尝试过的事情:
保留在STP的QueueWorkItem()里面
最佳答案
在运行mono时尝试使用--server
标志(仅与mono master兼容,因为它是最近提交的)。