哪个更快-C#不安全代码或原始C++ - c#

我正在编写一个图像处理程序来执行视频帧的实时处理。它在C#中使用包装OpenCV库dll(非托管C++)的Emgu.CV库(C#)。现在,我必须编写自己的特殊算法,并且它需要尽可能快。

哪种算法会更快实施?

  • 在C#中编写“不安全”函数
  • 将函数添加到OpenCV库并通过Emgu.CV调用
  • 我猜测C#不安全的速度较慢,因为它会贯穿JIT编译器,但是差异会很大吗?

    编辑:

    在VS2008下为.NET 3.5编译

    参考方案

    它需要尽可能快

    然后,您问错了问题。

    在汇编器中对其进行编码,针对您支持的每种重要体系结构变体使用不同的版本。

    可以将最佳C++编译器的优化输出用作指导,因为它可能知道一些您不知道的技巧。但是您可能会想到一些改进,因为C++不一定会将可能对优化有用的所有信息传达给编译器。例如,C++没有C99关键字限制。尽管在那种特殊情况下,许多C++编译器(包括MSVC)现在都支持它,所以请尽可能使用它。

    当然,如果您的意思是“我希望它速度很快,但又不要超出C#或C++的范围”,那么答案就不同了;-)

    在许多情况下,我希望C#至少能达到外观相似的C++的性能。我当然认为程序将运行足够长的时间,以至于JIT本身花费的时间是无关紧要的,但是,如果您要处理大量视频,那么这似乎是可能的。但是我也希望有某些事情,如果您使用不安全的C#进行操作,这些操作将比C++中的等效操作慢得多。我不知道它们是什么,因为我所有的JIT经验都是Java而不是CLR。在C++中,有些事情可能会变慢,例如,如果您的算法对C#代码进行了任何调用。

    不幸的是,确保两者接近并唯一的方法是同时编写和测试它们,而这遗漏了编写C++版本需要花费大量精力的观点。但是,您可以通过破解一些近似于您要执行的处理的快速代码来获得一个大概的主意,而不必全部执行或正确处理。如果算法要遍历所有像素并为每个像素做一些FP运算,那么粗略地比较基准应该花费整个半小时。

    通常我建议不要开始思考“这需要尽可能快”。要求应该是可以实现的,并且按照定义,“尽可能X”仅是可以达到的边界。需求也应该是可测试的,除非您以某种方式知道理论最大值,否则“尽可能X”是不可测试的。一个更友好的要求是“这需要在这样的速度的CPU上实时处理这样的分辨率的视频帧”,或者“这需要比我们主要竞争对手的产品更快”。如果C#版本做到了这一点,并且有一点余地可以解决用户设置中的意外小问题,那么工作就完成了。

    在Java中,执行“ ++++++++”表达式,编译器未报告任何错误并且可以正确执行? - java

    我用eclipse编写了这段代码,用war写过,结果为3d。public static void main(String[] args) { double a = 5d + + + + + +-+3d; System.out.println(a); } 参考方案 您的表情可以改写为(5d) + (+ + + + +-+3d) 其中第一个+是应用于两个操作数的…

    在Python和C++之间传输数据而无需写入Windows和Unix文件 - python

    我有预先存在的python和C ++文件,其中python文件定义了许多点,而C ++代码利用其现有库进行了所需的计算。最终产品是C ++代码写入的文件。我正在寻找一种在python中获取2000点列表的方法,将其传递给函数,然后执行所有C ++代码并输出我需要的文件。其他注意事项。这必须是可以在Linux或Windows机器上工作的东西,并且最少安装新插件…

    Java值加变量++ - java

    考虑以下代码int val1 = 3; val1++; int val2 = val1++; System.out.println(val1); System.out.println(val2); Val1值= 5;Val2值= 4;为什么Val1的值是“ 5”?据我了解,应该为4,因为:在第1行,它的赋值为3,在第2行,通过val1 ++加上1,结果val…

    如何锁定终端运行的perl,obj c,c++,python和ruby等脚本的源代码? - python

    我想出售我在perl,obj c,c ++,python,ruby,bash,php等中制作的脚本等它们都在终端中运行。 (Linux)如何锁定源代码,以便无需人们访问源代码即可分发我的脚本..?换句话说,如何将在Terminal中运行的程序的源代码锁定,以便人们可以使用该程序(如果该代码已下载到他们的Linux机器上,但他们无法访问实际的源代码)?例:ex…

    在C++之后学习C# - c#

    随着语言的发展,我一直在学习C和C++。现在,我想学习C#。我知道它们之间有一些巨大的差异-例如删除指针和垃圾回收。但是,我不知道两者之间的许多差异。C++程序员在转移到C#时需要知道的主要区别是什么? (例如,我可以使用什么代替STL,它们之间的语法差异或任何其他可能被认为重要的东西。) 参考方案 C# for C++ Developers是一个不错的起点…