【发布时间】:2025-12-08 02:05:02
【问题描述】:
我想构建自己的信号处理库,可能还有另一个关于图形算法的库。我发现 C# 在与内存分配、指针、线程等相关的可能错误方面非常有用和强大......
但我想知道在性能方面我会损失多少。这会是可以接受的吗?
谢谢
【问题讨论】:
标签: c# c++ performance
我想构建自己的信号处理库,可能还有另一个关于图形算法的库。我发现 C# 在与内存分配、指针、线程等相关的可能错误方面非常有用和强大......
但我想知道在性能方面我会损失多少。这会是可以接受的吗?
谢谢
【问题讨论】:
标签: c# c++ performance
当我开始我的 DSIP 课程时,我是一名纯 C# 开发人员。看了一段时间后,我最终使用了 C++ 库并学习了 C++,这最终对我有利,因为我正在做实时图像处理,而 C# 的性能无法与之匹敌。
事实上,您可以运行一个快速测试并运行一个由 C# 和 C++ 中的几个乘法组成的数学方程一百万次,然后就会看到使用浮点数进行计算的巨大差异。
如果你幸运的话,你会在 C# 中获得包装器,这是两全其美的,在 C++ 中快速计算并且在 C# 中易于使用。 OpenCV 有一个 C# 包装器,看起来相当不错 (http://www.emgu.com/wiki/index.php/Main_Page)。
我强烈推荐 OpenCV,尤其是用于 2D 信号处理。它的性能很棒,使我的项目成为可能。在此处查看演示:http://www.youtube.com/watch?v=NeQvcdRPxoI 和 http://www.youtube.com/watch?v=NqYPJELHkhA
【讨论】:
有了合适的硬件,你应该不会有问题。
需要考虑的一点是:我可以毫不费力地找到一个库来用 C++ 进行信号处理。但是,我根本找不到太多关于 C# 信号处理的信息。
如果您能找到让它发挥作用的方法,那么您可能刚刚找到了进入一个可以让许多其他人受益的利基开发领域的方法。
只是想一想。除非您在某些关键任务系统上执行此操作,否则这两种方法都可能无关紧要。从长远来看,我会选择你认为对你更有利的任何东西。
【讨论】:
与其说是 C# 中的性能损失,不如说是执行垃圾收集的时间的不可预测性。在 GC 期间,所有托管线程都被冻结,直到 GC 完成。在此期间,您无法进行任何处理,这对于 99% 的应用程序而言无关紧要,但对于信号处理而言至关重要。这就是为什么您看不到 Microsoft 认可的 DirectShow 托管版本或其他“实时”信号处理应用程序的原因。
【讨论】: