我已经创建了光线跟踪器的基础,这是我绘制场景的测试函数:
public void Trace(int start,int jump,Sphere testSphere) { for (int x = start; x < scene.SceneWidth; x += jump) { for (int y = 0; y < scene.SceneHeight; y++) { Ray fired = Ray.FireThroughPixel(scene,x,y); if (testSphere.Intersects(fired)) sceneRenderer.SetPixel(x,y,Color.Red); else sceneRenderer.SetPixel(x,Color.Black); } } }
SetPixel只是在一维颜色数组中设置一个值.如果我通过直接调用它来正常调用函数它以恒定的55fps运行.如果我做:
Thread t1 = new Thread(() => Trace(0,1,testSphere)); t1.Start(); t1.Join();
它以50fps的速度运行,这很好并且可以理解,但是当我这样做时:
Thread t1 = new Thread(() => Trace(0,2,testSphere)); Thread t2 = new Thread(() => Trace(1,testSphere)); t1.Start(); t2.Start(); t1.Join(); t2.Join();
它遍布整个地方,在30-40 fps之间快速移动,有时超出50或者降到20,它根本不是恒定的.为什么它比在单个线程上运行整个事情时运行速度慢?我正在运行四核i5 2500k.