- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这个问题我可能应该早点问,但我并没有急于在 MonoTouch 中玩 p/invoke 类型的东西。
基本上,我遇到了与大量浮点运算相关的性能问题,特别是涉及最小/最大函数、 vector 乘法和类似内容的运算(基本上检测不同类型的形状是否相交)。
这些操作的原因是因为一个用 C# 编写的 2D 物理引擎。
在某些平台上,例如 Windows Phone 7 和 Xbox 360,物理引擎运行没有任何障碍,它窃取了一些 CPU 周期,但留下足够的时间来确保游戏以稳定的帧率运行。
问题出在 iPhone 上运行的 MonoTouch 中。看起来 MonoToch 并不是那么好,有这么多浮点运算,iPhone(甚至 iPad 2)发现自己受到严重影响,物理是明显的性能瓶颈。我有 profiled the performance它归结为一组相对基本的数学函数,如 I mentioned before并且没有优化这些功能的真正方法,物理引擎本身写得很好,我看不出它有任何明显的落后之处,坦率地说,我怀疑它作为 2D C# 物理引擎有什么问题。
为此,我决定找到一个用 C(或 C++,如果可能)编写的物理引擎,并将其与主要的 MonoTouch 应用程序连接起来。我的理由是,由于 MonoTouch 中的性能问题可能与以下事实有关:MonoTouch 编译器编译 .net 代码的速度不如 Wp7/xbox 360 JIT 编译器那样快(这是可以理解的),将事情从 monotuch 中移出在 native 运行它们将有助于提高性能。
所以我的想法是我将使用 Box2D,编写一堆静态包装函数(例如 CreateWorld()、CreateBox()、GetBodyPosition(int id) 等)并通过 p/调用功能并将其全部集成到我的物理包装类中,这样核心游戏逻辑将需要最少的修改甚至不需要修改,我可以保持原始代码设计的完整性,但由于物理运行在原生 C.
但这让我想到,性能问题源于非常简单直接的数学函数、简单的乘法和大小比较。如果通过 p/invoke 运行函数会提高速度,那么只需将 Vector2.Max 等函数重写为 C 函数并调用它也能提高性能?
然而,这似乎有点牵强,如果是这样的话,Mono 不会这样做吗?
所以我想我的总体问题是,当从 p/invoke 调用时,静态链接的 native 库是否比 MonoTouch 编译的等效 C# 函数执行得更好?
最佳答案
实际上只有一种方法可以确定它是否更快:对您的案例进行基准测试。可能是您用于 native 库的 c 编译器能够比 mono 的 jit 优化更多,或者可能只是 cpu 不适合您的特定工作负载。
如果您想尝试使用 native 库,请记住您不想经常从托管调用 native 代码,每次托管到 native 的转换都会对性能造成重大影响(影响程度取决于很多因素,但转换次数越少越好)。
也就是说,我个人的猜测是 mono jit 不能很好地处理浮点运算(之前在某些 cpu 上有过这个问题,我现在不记得这些问题是否仍然存在也不在哪个 cpu 上),因此您将从使用 native 库中受益。
关于c# - 使用P/invoke提高性能,可行还是一厢情愿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812104/
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有以下对象: var myObj = { "4":{//The key is a number String. id:4,name
我需要构建某种字典,其中还包含每个单词在该语言中出现的单词频率。通常,这将使用 std::unordered_map 来实现,对吧?现在问题来了……我想找到所有符合某些正则表达式的单词及其频率,而性能
软件开发通常会提到一个名词 “三高”,即高并发、高性能、高可用。 具体的指标定义,如:高并发方面要求QPS 大于 10万;高性能方面要求请求延迟小于 100 ms;高可用方面要高于 99.99
我有一个大约有 108000 个三角形的网格,应该用 WebGL 渲染。 目前我不使用框架,只使用纯 WebGL。我已经通过 id 映射实现了对象识别,以便使用回调功能和基本的相机操纵器进行拾取。 现
我读过无数的帖子,无数次地重写过代码,我发现自己碰壁了。由于应用了 CSS scale3d 转换的容器,我试图克服在滚动页面时不使用 CSS 固定元素位置的限制。虽然我最新的解决方案有效,但它有时仍然
我正在开发一个嵌入式系统,它需要非常频繁地存储和检索数据。我预计每秒可能有 100 次写入和 10 次读取。数据将以突发而不是连续的方式到达。 我想使用 SQLite 来存储所有这些数据,但由于它是一
当前情况 在我们的一款 SPA Web 应用程序中,我们使用自定义跟踪器请求来跟踪各种用户操作,例如 cta 点击、页面导航 等,该请求将一些信息传递到后端使用 POST 请求。 问题现在,因为这些跟
我正在编写执行大量表查找的程序。因此,当我偶然发现 Data.Map (当然),以及 Data.HashMap 和 Data.Hashtable 时,我正在仔细阅读 Haskell 文档>。我不是散列
我正在评估我们的高性能电信应用程序的 BPEL 引擎,但性能似乎很差。我们评估了 Apache Ode、SunBPEL 引擎、Active BPEL 等。您知道任何更快的 BPEL 引擎实现或 C/C
我目前正在重写一个旧的 ASP\ASP.NET 应用程序。由于我无法完全重写,所以我需要分部分进行。现在我正在将代码库从 ODBC 升级到 .net 连接器。 有一个函数可以在用户每次访问页面时进行一
旁注:我正在使用 JQuery,但没有使用任何第三方表格组件(我现在也不能)。 我的问题是我应该能够显示很多(10000)条经过的消息——每秒都会有数百条新消息,它们应该被添加到底部。当我们达到 10
为了争论,假设我试图在 MySQL 表中表示一个非常简单的文件系统。请注意,这并不是我正在做的,它只是为问题的简单基础做准备。所以不要费心告诉我存储文件的更好方法。该表的架构如下: varchar p
我希望优化我使用python时遇到的大数据解析问题的性能。以防有人感兴趣:下面显示的数据是六种灵长类动物全基因组DNA序列比对的片段。 目前,我知道如何处理这类问题的最好方法是打开我的~250(大小2
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我需要用 Ruby 制作一个小应用程序,它将以不同颜色显示通过 TCP 接收的日志行。推荐用于此类应用的 GUI 框架是什么? 我应该在 Windows 和 Linux 上工作。 最佳答案 Shoes
我正在尝试编写一个非常简单的 Web 服务器来执行以下操作: 接收请求。 响应一个小文件;关闭连接。 处理请求数据。 换句话说,响应不依赖于请求信息,但请求信息仍然很重要。数据将被保留,然后用于分析。
我正在使用 WebSocket 协议(protocol)(通过 WebSocketSharp)开发 C# 游戏服务器。目前,每当用户登录游戏时,我都会创建一个 token 并将其添加到 Concurr
我正在处理应用程序的延迟敏感部分,基本上我会收到一个网络事件来转换数据,然后将所有数据插入到数据库中。在分析之后,我发现基本上我所有的时间都花在了保存数据上。这是代码 private void ins
我正在尝试将视频输出(帧序列)输出到任何 qt 可见小部件。一开始我认为 QLabel 就足够了......但我错了。转换为像素图对于大型图像的处理器来说过于过载:例如 1080p。 还有其他解决方案
我是一名优秀的程序员,十分优秀!