C# 多线程奇怪的行为

标签 c# multithreading unity3d

基本上我正在研究这个节拍检测算法,我现在遇到的奇怪的事情是当我将工作负载分配给另一个线程时。所以现在我有一个主线程和另一个工作线程。我的工作线程总是比主线程工作得更快。这看起来很奇怪,因为我了解到主线程理论上应该总是更快,因为它不需要时间来初始化线程。然而,我得到的是即使我将额外的 1024 个样本传递给工作线程(它们目前都在处理大约 3000 万个样本)它仍然比主线程快。是因为我有应用程序在我的主线程上运行吗?我现在真的很困惑。这是代码

UnityEngine.Debug.Log ("T800 Start");
        Step3 s1= new Step3();
        Step3WOMT s2= new Step3WOMT();
        System.Object tempObj= samples2 as System.Object;
        float[] tempArray = new float[eS.Length/ 2];
        System.Threading.ParameterizedThreadStart parameterizedts = new System.Threading.ParameterizedThreadStart(s1.DoStep3);
        System.Threading.Thread T1 = new System.Threading.Thread(parameterizedts);
        T1.Start (tempObj);
        s2.DoStep3(samples1);
        UnityEngine.Debug.Log ("s2");
        //UnityEngine.Debug.Log (stopwatch.ElapsedMilliseconds);
        T1.Join();

别担心,我只是在多线程中使用了 C# 功能,所以我相信它应该没问题。我真正感到困惑的是,如果我注释掉 T1.join();整条线以某种方式变得更慢。我现在真的很困惑,因为这个问题似乎没有合理的答案。

最佳答案

T1.join() 施展了所有魔法。它允许主线程等待所有工作线程完成。那有必要吗?取决于你的申请。主线程应该等待其工作线程执行结束。

关于C# 多线程奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29788322/

相关文章:

c# - “不要公开通用列表”,为什么在方法参数中使用 collection<T> 而不是 list<T>

c# - 复合应用程序 block - 是否有合适的替代品可用?

c# - 两个日期之间的年、月、日、小时

java - 锁定对象的字段值

python - 在 QLabel 中显示相机流

java - 如何比较线程对象

c# - 索引超出范围异常 : Array index is out of range when trying to access GameObject array?

c# - Network Lobby Manager Unity3D 中的不同预制件

c# - 在 Unity 中打电话?

c# - 错误 1904 - 模块 KinectAudio10.dll 注册失败