内存管理理念?

Rab*_*bir 0 c# memory

我正在使用SharpDX用C#编写游戏......所以,对于绘制一个帧,目前我正在使用一个Timer,间隔设置为1; 但这对游戏来说太慢了,所以我想要更快的东西...首先,如果我使用另一个线程进行游戏(另一个用于Window本身)并使用"[while(InGame)]"声明,它很快,但GC永远不会释放单个对象,并且内存使用率只会上升......

如果我使用内置"RenderLoop"功能的SharpDX,它也很快,但GC仍然没有做任何事情......

我试图覆盖Window窗体"WndProc"功能,但游戏只刷新自己然后我像疯子一样移动鼠标......

这是我的第一个真正的游戏,有很多功能,所以如果你们有任何想法,我将如何解决它,或者我应该使用什么,我会很感激...窗体表格生命周期中必须有一些东西像一个

void FormLife
{
     WndProc();
     HandleEvents();
     etc...
}
Run Code Online (Sandbox Code Playgroud)

(这只是一个很难的例子......)

或者我怎么能强迫GC在while(InGame)状态结束时完成它的工作呢?我已经尝试GC.Collect();但它不起作用......

Dan*_*rod 5

  1. 不要将您的游戏逻辑放在UI类中.

  2. 使用多媒体计时器和调度程序返回主线程进行渲染.根据我的经验,5毫秒的循环效果很好.(较低会浪费CPU时间).

  3. 使用Input的调度程序优先级,以便计时器不会阻塞UI并阻止它处理用户事件.

  4. 在计时器事件上,如果先前的更新尚未完成,则立即返回而不执行任何操作(您可以使用System.Threading.Interlocked.CompareAndExchange作为便宜的同步方法).

  5. 为了让游戏运行得更快,尝试重用对象并更改其状态或传递短暂的不可变因素,以便GC不会延迟您的程序.

  6. 如果适用,请使用IDisposable模式.