还是现在反过来了?

据我所知,c#在某些领域被证明比c++更快,但我从来没有勇气亲自测试它。

我想你们任何人都可以详细解释这些差异,或者告诉我有关信息的正确位置。


当前回答

对于图形来说,标准的c#图形类比通过C/ c++访问的GDI慢得多。 我知道这与语言本身无关,更多的是与整个。net平台有关,但是图形是作为GDI替代品提供给开发人员的,它的性能非常糟糕,我甚至不敢用它来处理图形。

我们有一个简单的基准来查看图形库的速度,那就是在窗口中随机绘制线条。c++ /GDI在处理10000行代码时仍然很灵活,而c# /Graphics在处理1000行代码时却很难做到。

其他回答

c#和c++在性能方面有一些主要的区别:

c#是基于GC /堆的。分配和GC本身是内存访问的非局部性开销 多年来,c++优化器已经变得非常好。JIT编译器无法达到相同的级别,因为它们只有有限的编译时间,并且看不到全局作用域

除此之外,程序员的能力也很重要。我见过一些糟糕的c++代码,其中的类通过值作为参数传递。在c++中,如果你不知道自己在做什么,实际上会让性能变差。

这是一个非常模糊的问题,没有真正明确的答案。

例如;我宁愿玩用c++而不是c#创建的3d游戏,因为性能肯定要好得多。(我知道XNA等,但它与真正的东西相去甚远)。

另一方面,如前所述;您应该使用一种能够让您快速完成所需工作的语言进行开发,并在必要时进行优化。

受此启发,我做了一个快速测试,使用了大多数程序所需的60%的通用指令。

下面是c#代码:

for (int i=0; i<1000; i++)
{
    StreamReader str = new StreamReader("file.csv");
    StreamWriter stw = new StreamWriter("examp.csv");
    string strL = "";
    while((strL = str.ReadLine()) != null)
    {
        ArrayList al = new ArrayList();
        string[] strline = strL.Split(',');
        al.AddRange(strline);
        foreach(string str1 in strline)
        {
            stw.Write(str1 + ",");
        }
        stw.Write("\n");
    }
    str.Close();
    stw.Close();
}

字符串数组和数组列表是特意用来包含这些指令的。

下面是c++代码:

for (int i = 0; i<1000; i++)
{
    std::fstream file("file.csv", ios::in);
    if (!file.is_open())
    {
        std::cout << "File not found!\n";
        return 1;
    }

    ofstream myfile;
    myfile.open ("example.txt");
    std::string csvLine;

    while (std::getline(file, csvLine))
    {
        std::istringstream csvStream(csvLine);
        std::vector csvColumn;
        std::string csvElement;

        while( std::getline(csvStream, csvElement, ‘,’) )
        {
            csvColumn.push_back(csvElement);
        }

        for (std::vector::iterator j = csvColumn.begin(); j != csvColumn.end(); ++j)
        {
            myfile << *j << ", ";
        }

        csvColumn.clear();
        csvElement.clear();
        csvLine.clear();
        myfile << "\n";
    }
    myfile.close();
    file.close();
}

我使用的输入文件大小为40 KB。

结果是

c++代码在9秒内运行。 c#代码:4秒!!

哦,但是这是在Linux上…在Mono上运行c#…c++和g++。

好的,这是我在Windows - Visual Studio 2003上得到的:

c#代码在9秒内运行。 c++代码——可怕的370秒!!

对于图形来说,标准的c#图形类比通过C/ c++访问的GDI慢得多。 我知道这与语言本身无关,更多的是与整个。net平台有关,但是图形是作为GDI替代品提供给开发人员的,它的性能非常糟糕,我甚至不敢用它来处理图形。

我们有一个简单的基准来查看图形库的速度,那就是在窗口中随机绘制线条。c++ /GDI在处理10000行代码时仍然很灵活,而c# /Graphics在处理1000行代码时却很难做到。

这要看情况。如果字节码被转换成机器代码(不仅仅是JIT)(我的意思是如果你执行程序),如果你的程序使用了很多分配/释放,它可能会更快,因为GC算法只需要一次(理论上)通过整个内存,但正常的malloc/realloc/free C/ c++调用会在每次调用上引起开销(调用开销、数据结构开销、缓存丢失;))。

所以这在理论上是可能的(对于其他GC语言也是如此)。

我并不认为不能在大多数应用程序中使用c#元编程有什么极端的缺点,因为大多数程序员都不使用它。

另一个很大的优势是SQL,像LINQ“扩展”一样,为编译器提供了优化数据库调用的机会(换句话说,编译器可以将整个LINQ编译为一个“blob”二进制文件,其中调用的函数内联或为您的使用优化,但我只是在这里推测)。