首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++/CLI性能提升

C++/CLI性能提升
EN

Stack Overflow用户
提问于 2009-12-07 18:24:36
回答 7查看 3K关注 0票数 1

我很久以前开始使用普通的C语言,然后转到C++,现在我面对的是C++/CLI。作为一个性能怪胎,我总是试图将最后一滴性能挤到每一行代码中。我目前在一个项目中,主要使用VB.Net (简单性,资源可用性等)完成,但有几点对性能非常敏感,我计划用C++/CLI语言完成这些部分。然而,它只有一小部分可以从托管代码中取出,而其余的则需要保持托管。问题是,与C#或VB.Net相比,通过编写C++/CLI托管函数可以获得预期的性能提升吗?从我读过的文档中我可以理解,唯一的优势似乎是托管/非托管thunking更轻。真的是这样吗?因为我甚至不能将句柄存储在非托管数组或结构中(我可以更快地操作它们),例如:

代码语言:javascript
复制
String ^ mystr = "Oh, my!";
Object ^ myarray[10];
myarray[0] = mystr; // Can't event be casted to void*, int, HANDLE...
// (however, handles do have a sizeof() == 4 in Win32)
// (I don't expect the handle to behave like a pointer; just stay as handle)
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-12-07 18:43:57

在使用C++/CLI时,您可能看到的唯一性能提升是将本机代码和托管代码混合在一起。C++/CLI允许您以比VB.Net更少的开销为代码的性能关键部分调用本机方法。我不建议到处在本机和托管之间切换,因为这仍然是有惩罚的,但将控制传递给与性能相关的代码块的本机代码是可以接受的。

票数 0
EN

Stack Overflow用户

发布于 2009-12-07 22:06:47

我也是个表演狂人,我学到了

  1. 这种问题我甚至不会问,直到我知道性能问题在哪里,
  2. 一旦我知道它们在哪里,我就不需要问了,因为我很容易找到,因为a)所有编译语言都会生成我可以查看的汇编语言或中间语言,b)我可以运行它10^6次,然后只需计时。

我的经验是有多个性能问题,具有不同的大小。首先,我修复最简单/最大的那些。这使得其余的人花费了更多的时间,所以在下一次传递时更容易找到他们。**

I keep doing tuning passes until I run out of performance problems I can fix.到那时,代码可以比开始时快得多。

**示例:假设程序运行时间为10秒。假设有两个问题(直到你看了才知道),它们分别占50%和30%。你修复了第一个,时间降到了5秒。现在第二个问题消耗了60%,因为总时间减少了,所以更容易发现。解决它,时间下降到2秒-5倍的速度。问题越多,可能的加速效果就越显著。人们可能会怀疑他们有这么大的问题,如果是这样,抽样将证明或反驳这一点。

票数 3
EN

Stack Overflow用户

发布于 2009-12-07 22:18:29

C++/CLI是托管的-它被编译成与其他所有.net语言相同的MSIL。如果速度对你来说是王道,在原生动态链接库中编写临界位,并从你的vb.net应用程序中调用它(保持thunk的倒计时,你就应该很好)。

虽然tbh,id首先分析代码,看看这是否真的是必要的,而不仅仅是过早的优化。无论如何,MSIL都可以编译成本机代码--真正的问题是.net JITer是否和本机c/c++编译器一样优化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1859123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档