首页 / C# / 管理与C#的非托管物理引擎
管理与C#的非托管物理引擎
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了管理与C#的非托管物理引擎,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1680字,纯文字阅读大概需要3分钟。
内容图文
![管理与C#的非托管物理引擎](/upload/InfoBanner/zyjiaocheng/815/401185b99254478ebc66ec17cd0c6464.jpg)
有人试过BEPU Physic Engine吗?
http://bepuphysics.codeplex.com/
它是一个用C#编写的完全托管的物理引擎……我知道它主要用于XNA(XBOX和WP7项目),因为不允许使用非托管代码.
但我想知道的是如何将完全托管的物理引擎与Windows环境中的P / Invoked One(例如tao.ODE)进行比较(在性能方面)?
换句话说,哪个方法在Real Project中围绕非托管引擎(如ODE或PhysX)进行更多开销,完全托管代码或P / Invoke Wrapper?
解决方法:
我不能评论具体的物理引擎,但是我可以提供一些编写高性能代码(非托管和托管)的经验.
几年前,我研究了一个用Delphi编写的移植到.NET的仿真软件(在我到达之前我可能会说).它是用于质谱仪模拟的纯托管代码和计算离子轨迹.代码涉及数值积分,微分,N体静电荷计算,所以当然是在测试CPU.
我发现通过各种实验试图找到最高性能,一些C版本的仿真程序可以被优化的C#代码打败.
通过良好优化,我的意思是减少新运算符(重用对象),缓存,对象池,尽可能使用结构,尽可能减少方法调用,尽可能将方法调用移动到静态/密封,最小化传递给的数量方法,在发行版中编译,x64,与调试器分离.一旦我做到这一点,实际上使用C击败CLR我不得不采用低级技术,如SSE / SSE2和内联汇编程序.
好吧,我承认,C#和托管语言与经验丰富的手动优化的C代码不匹配,但我看到两个平台上的代码都没有得到优化.当C#代码很慢时,很容易责怪CLR,但是当开发人员随意使用new运算符时,我发现奇怪的是,当GC频繁运行时,他们会感到惊讶. C中的new和delete也会影响性能,所以不要指望C编译只是让事情变得更快.
回到您的特定引擎 – 您当然必须自己进行一些测试和性能分析.关于平台调用,当指针和结构在托管/非托管边界上编组时,它确实会导致称为thunking的性能损失.纯托管代码不会有这个,但它也会错过优化,例如低级内存拷贝,SSE / SSE2扩展等……可以用C编码.
最后,我要说的是一个非常强大和快速的托管 – >平台调用库的例子,请看一下SlimDX.好的,您将获得超过本机代码和DirectX的性能损失(一些消息来源说~5但是为了提高C#开发的生产效率,我说它值得!
最好的祝福,
内容总结
以上是互联网集市为您收集整理的管理与C#的非托管物理引擎全部内容,希望文章能够帮你解决管理与C#的非托管物理引擎所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。