C# SlimDX:限制帧速率以降低cpu使用率

C# SlimDX:限制帧速率以降低cpu使用率,c#,directx-9,slimdx,C#,Directx 9,Slimdx,我正在使用SlimDX(DirectX 9)制作一个2D游戏引擎,但是我面临着两个相互关联的问题:帧速率波动(虽然帧速率很高)和cpu使用率高。帧速率本质上是所有动画运行的游戏计时器。CPU使用率也很高(20%),我想限制SlimDX绘制帧的速度以降低CPU使用率,并且为了稳定动画和游戏速度,我该怎么做 p、 s我相信有更好的方法来制作一个游戏“计时器”,它与帧速率分开,任何信息都将受到欢迎 循环和序列化: var form = new RenderForm(World.

我正在使用SlimDX(DirectX 9)制作一个2D游戏引擎,但是我面临着两个相互关联的问题:帧速率波动(虽然帧速率很高)和cpu使用率高。帧速率本质上是所有动画运行的游戏计时器。CPU使用率也很高(20%),我想限制SlimDX绘制帧的速度以降低CPU使用率,并且为了稳定动画和游戏速度,我该怎么做

p、 s我相信有更好的方法来制作一个游戏“计时器”,它与帧速率分开,任何信息都将受到欢迎

循环和序列化:

            var form = new RenderForm(World.WindowTitle);
        form.ClientSize = new Size(World.WindowWidth, World.WindowHeight);
        var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
        {
            BackBufferWidth = form.ClientSize.Width,
            BackBufferHeight = form.ClientSize.Height
        });
        //Some stuff here, irrelevant to DirectX
        MessagePump.Run(form, () =>
        {
            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            device.BeginScene();
            sprite.Begin(SlimDX.Direct3D9.SpriteFlags.AlphaBlend);
            //Stuff here
            sprite.End();
            device.EndScene();
            device.Present();
            //Thread.Sleep(1); <-- this didnt work using 0 or 1, it actually increased cpu ussage
        });
var form=newrenderform(World.WindowTitle);
form.ClientSize=新大小(World.WindowWidth、World.WindowHeight);
var device=new device(new Direct3D(),0,DeviceType.Hardware,form.Handle,CreateFlags.HardwareVertexProcessing,new PresentParameters())
{
BackBufferWidth=form.ClientSize.Width,
BackBufferHeight=form.ClientSize.Height
});
//这里有些东西,与DirectX无关
MessagePump.Run(表单,()=>
{
设备。清除(ClearFlags.Target | ClearFlags.ZBuffer,彩色。黑色,1.0f,0);
device.BeginScene();
sprite.Begin(SlimDX.Direct3D9.SpriteFlags.AlphaBlend);
//这里的东西
sprite.End();
device.EndScene();
device.Present();

//Thread.Sleep(1);NVM我有一个想法是可行的,因为我想要60 fps,这意味着每帧之间大约16毫秒,所以我测量渲染一帧所需的时间,然后是Thread.Sleep 16-渲染时间(如果高于0),现在CPU使用率为零,如果引擎绘制帧所需时间超过16毫秒,则它将在之后直接绘制下一帧

            var form = new RenderForm(World.WindowTitle);
    form.ClientSize = new Size(World.WindowWidth, World.WindowHeight);
    var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
    {
        BackBufferWidth = form.ClientSize.Width,
        BackBufferHeight = form.ClientSize.Height
    });
    //Some stuff here, irrelevant to DirectX
    MessagePump.Run(form, () =>
    {
        Stopwatch stopwatch = Stopwatch.StartNew();
        device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
        device.BeginScene();
        sprite.Begin(SlimDX.Direct3D9.SpriteFlags.AlphaBlend);
        //Stuff here
        sprite.End();
        device.EndScene();
        device.Present();
        stopwatch.Stop();
        int ms = 16 - (int)(stopwatch.ElapsedMilliseconds);
        if (ms > 0)
        {
            Thread.Sleep(ms);
        }
    });