信号处理:C ++ vs C#

时间:2010-10-05 18:28:59

标签: c# c++ performance

我想建立自己的信号处理库,可能还有另外一个关于图算法的信号处理库。我发现C#对于与内存分配,指针,线程等相关的可能错误非常有用和强大......

但我想知道在性能方面我将失去多少。这会是可以接受的吗?

由于

3 个答案:

答案 0 :(得分:6)

当我开始我的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=NeQvcdRPxoIhttp://www.youtube.com/watch?v=NqYPJELHkhA

答案 1 :(得分:3)

使用合适的硬件,您不应该有问题。

要考虑的事情:我在试图找到一个用C ++进行信号处理的库时没有任何麻烦。但是,我无法轻易找到有关C#信号处理的大量信息。

如果你能找到一种方法让它发挥作用,你可能已经找到了一种方法来进入一个许多其他人可以从中受益的利基发展领域。

需要考虑的事情。除非你在一些关键任务系统上这样做,否则两种方式都无关紧要。我会选择你认为从长远来看会对你有益的任何事情。

答案 2 :(得分:3)

与C#中的性能损失无关,而是执行垃圾收集时的不可预测性。在GC期间,所有托管线程都将冻结,直到GC完成。在此期间,您无法进行任何处理,99%的应用程序无关紧要,但对于信号处理至关重要。这就是为什么你没有看到微软认可的DirectShow托管版或其他“实时”信号处理应用程序的原因。