【发布时间】:2011-05-10 21:56:39
【问题描述】:
我正在为一个量化库构建一个原型,该库使用图像处理技术进行一些信号分析。我完全用 C# 构建了初始原型,但性能不如预期。大部分计算是通过繁重的矩阵计算完成的,这些计算占用了大部分时间。
我想知道是否值得为非托管 C++ 代码编写 C++/CLI 接口。有没有人经历过这个?欢迎提出其他优化 C# 性能的建议。
【问题讨论】:
-
不确定我们能否在不查看某些代码的情况下提供准确的指导。理论上,你可以用 C++ 编写性能更高的代码……但你也可以用 C++ 编写更差的代码。
-
在您为编写 C++/CLI 代码而烦恼之前,请使用分析器(例如 JetBrains dotTrace、RedGate ANTS 等)找出您的 C# 代码运行缓慢的原因。根据瓶颈,您可能可以通过重新编写一些 C# 代码来删除它,明智地使用 C# 中的 unsafe 关键字和指针,或者在 C++ 中重新编写核心部分。最好的解决方案将取决于瓶颈。请记住,由于编组开销,您最终可能会获得比纯 C++ 解决方案更差的性能。因此,请确保您知道要解决的问题。
-
@Andrew,我想说 C# 通过提供许多开箱即用的解决方案来防止程序员进行更糟糕的编码。将 C# 编码和一些用 C++ 写得很糟糕的代码进行比较是不公平的。
-
@thomas1234- 鉴于这个问题的普遍性,答案是非托管 C++ 会更快。
-
@Jimmy +1 因为我完全同意你的评论;我只是从 C++ 方面更多地看待“让我们将其移至 C++ 以使其更快”的角度。不过,您的评论完成了这个想法。正确编码后,C# 可以更轻松地获得“相当不错的性能”。
标签: c# visual-c++ c++-cli unmanaged heavy-computation