我在想C++和C#之间的速度差异,主要是关于JIT编译器将C#编译成字节码(对吗?)所有的检查都是C#做的。
我注意到,在编译选项中以及可能通过使用unsafe关键字来关闭这些函数是可能的,因为公共语言运行库无法验证不安全的代码。
因此,如果您要用两种语言编写一个简单的控制台应用程序,它可以无限次数地翻转一个假想的硬币,并且每10,000次左右的迭代将结果显示到屏幕上,那么速度会有多大的差异呢?我选择这个是因为它是一个非常简单的程序。
我想测试这个,但我不知道C++,也不具备编译它的工具。不过,这是我的C#版本:
static void Main(string[] args)
{
unsafe
{
Random rnd = new Random();
int heads = 0, tails = 0;
while (true)
{
if (rnd.NextDouble() > 0.5)
heads++;
else
tails++;
if ((heads + tails) % 1000000 == 0)
Console.WriteLine("Heads: {0} Tails: {1}", heads, tails);
}
}
}这种差异是否足以保证故意编译代码中的“不安全”部分,或者编译到不具有某些编译选项(例如启用溢出检查)的DLL中?或者,如果在C++中编译部分会有好处,那么情况是否会相反呢?我相信互操作速度也起作用了。
为了避免主观性,我重申这一问题的具体部分如下:
发布于 2010-04-20 11:48:22
给出的示例存在缺陷,因为它没有显示这两种编程语言的实际使用情况。使用简单的数据类型来测量语言的速度不会带来任何有趣的东西。相反,我建议您在C++中创建一个模板类,并将其与C#中用于类泛型的内容进行比较。最后,对象将带来一些重要的结果,您将看到C++比C#更快。更不用说,您正在将低级编程语言与C#进行比较。
使用不安全代码是否提高了C#的性能?
是的,这将起到促进作用,但并不意味着您只编写不安全的代码。原因如下:使用不安全上下文编写的代码不能被验证为安全,因此只有在代码完全可信时才能执行。换句话说,不安全的代码不能在不受信任的环境中执行。例如,不能直接从Internet运行不安全代码。http://msdn.microsoft.com/en-us/library/aa288474(VS.71).aspx
,上面的程序在C++中会更快,还是会因疏忽而有所不同?
是的,这个程序在C++中会稍微快一些。C++是一种较低的编程语言,如果您开始使用算法库(我想到了random_shuffle),它会更快。
是否值得用C++之类的语言编译长时间密集的数字处理任务,或者使用/unsafe作为奖励?少主观地说,我能更快地完成一次密集的手术吗?
这取决于项目..。
发布于 2010-04-20 11:34:25
多达100%以上的速度--很大程度上取决于任务,简单地说。
超过100% -是的,因为即时编译器知道你的处理器,我怀疑你是否真的为你的硬件平台进行优化;)
如果执行矩阵操作,则不存在SSE问题。
使用大量数组(图像操作) FOr一些东西数组测试会杀死您,但是指针可以工作(即不安全的代码),因为它们绕过了这一点。
关于溢出检查之类的事情-小心点。如:在C++中,您可能拥有相同的内容。如果需要溢出检查,则不存在性能问题;)
在大多数情况下,我个人不会为C++操心。部分是肯定的,特别是当您可以从SSE中受益时:
所以,在最后,很大程度上取决于大自然,如果你的计算。
https://stackoverflow.com/questions/2674625
复制相似问题