首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于小型密集任务,C#与C++的性能有多近?

对于小型密集任务,C#与C++的性能有多近?
EN

Stack Overflow用户
提问于 2010-04-20 11:29:18
回答 2查看 983关注 0票数 4

我在想C++和C#之间的速度差异,主要是关于JIT编译器将C#编译成字节码(对吗?)所有的检查都是C#做的。

我注意到,在编译选项中以及可能通过使用unsafe关键字来关闭这些函数是可能的,因为公共语言运行库无法验证不安全的代码。

因此,如果您要用两种语言编写一个简单的控制台应用程序,它可以无限次数地翻转一个假想的硬币,并且每10,000次左右的迭代将结果显示到屏幕上,那么速度会有多大的差异呢?我选择这个是因为它是一个非常简单的程序。

我想测试这个,但我不知道C++,也不具备编译它的工具。不过,这是我的C#版本:

代码语言:javascript
复制
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++中编译部分会有好处,那么情况是否会相反呢?我相信互操作速度也起作用了。

为了避免主观性,我重申这一问题的具体部分如下:

  • C#使用不安全代码是否会提高性能?
  • 是否会禁用溢出检查提高性能等编译选项,它们是否会影响不安全代码?在C++中,上面的程序会更快吗?
  • 是否值得用C++等语言编译长时间密集的数字处理任务,或者使用/unsafe作为奖励?不那么主观地说,我能更快地完成一次密集的手术吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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作为奖励?少主观地说,我能更快地完成一次密集的手术吗?

这取决于项目..。

票数 2
EN

Stack Overflow用户

发布于 2010-04-20 11:34:25

多达100%以上的速度--很大程度上取决于任务,简单地说。

超过100% -是的,因为即时编译器知道你的处理器,我怀疑你是否真的为你的硬件平台进行优化;)

如果执行矩阵操作,则不存在SSE问题。

使用大量数组(图像操作) FOr一些东西数组测试会杀死您,但是指针可以工作(即不安全的代码),因为它们绕过了这一点。

关于溢出检查之类的事情-小心点。如:在C++中,您可能拥有相同的内容。如果需要溢出检查,则不存在性能问题;)

在大多数情况下,我个人不会为C++操心。部分是肯定的,特别是当您可以从SSE中受益时:

所以,在最后,很大程度上取决于大自然,如果你的计算。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2674625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档