Windforce » 日志 » Hello World——C家族速度比拼
Hello World——C家族速度比拼
Windforce 发表于 2008-03-19 16:57:24
C#目前是微软.NET平台首推的应用程序开发语言,C#数据库速度较快不能说明C#本身性能好,因为他们通过外部调用实现,时间集中在外部调用上,就如同
for(int i=0;i<100;i++)
{
//外部调用1秒钟
}
C#用125秒,C++用100秒,怎么能用慢了25%来衡量?C#速度的测试结果和Java相当,实际上Java和C#都比C++慢了5~20倍(要考 虑处理不同的数据性能不同,比如整型、浮点型、字符串,要考虑在堆中分配内存造成的速度降低,要考虑后台释放内存的开销,还要考虑其他因素,比如 Java/C#中字符串相加和C++中strcpy的巨大效率差异)。
另外,开发效率也是首先需要考虑的,这方面,c#比c++好。
至于,你选择哪种开发工具并不是本文要讨论的,具体应用不同,平台不同,开发工具自然不同。
下面开始介绍最简单的测试.
硬件环境:Dell Inspiron 3800 G700GT 笔记本电脑 CPU/PIII/700,ROM/128MB,HD/12GB。
软件环境:Windows 2000 + SP2,.NET平台 + Visual Studio.NET,Office XP。
所有的测试均是在命令行状态下以RELEASE模式编译程序,而非Visual Studio IDE集成开发环境,并在命令行状态下执行程序。没有对编译过程进行任何优化。
Hello World
Hello World测试程序主要是评测加载一个程序及其运行时环境所用的时间。C++的程序运行需要C运行库,从所周知,这个库是相当轻量级的。而C#程序的运行必须要加载.NET框架,从目前的情况看,这个框架无庸置疑不是一个轻量级的。
Hello World程序的C++代码如下: 代码一:helloworld.cpp
#include
int main(int argc, char *argv[])
{
std::cout << "Hello World" << std::endl;
return 0;
};
Hello World程序的C#代码如下: 代码二:helloworld2.cs
using System;
namespace HelloWorld
{
class Class1
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}
从这个测试的结果中,我们可以看到程序在相应环境中的加载时间。对于一个只完成简单任务的程序来说,无疑我们需要它能快速加载和退出。Perl脚 本是个有代表性的例子,运行这种需要大量的加载时间,从而导致其不能满足基于CGI且面向性能的Web站点的需要。这时,人们常常选择C++程序替 Perl脚本。但对于需要长时间处于激活状态的程序,其加载时间相对运行时性能来说就显得并不是那么很重要了。下表是十次测试的结果:
表一:Hello World 测试结果
序号 C++(~毫秒) C#(~毫秒)
1 40 1221
2 20 121
3 10 130
4 10 100
5 10 110
6 10 130
7 10 120
8 10 140
9 10 150
10 20 140
平均值 15 235
测试结果的精确程度由GetTickCount函数的精度决定。其精度大概在百分之一秒。从结果我们可以得出这样的结论。第一,冷启动.NET应 用过程所花费的时间比运行相同的应用多出一秒的时间。第二,启动后的程序再运行时,在C++代码大约是C#代码运行时间开销的十分之一。一般这种差别可以 忽略不计。
for(int i=0;i<100;i++)
{
//外部调用1秒钟
}
C#用125秒,C++用100秒,怎么能用慢了25%来衡量?C#速度的测试结果和Java相当,实际上Java和C#都比C++慢了5~20倍(要考 虑处理不同的数据性能不同,比如整型、浮点型、字符串,要考虑在堆中分配内存造成的速度降低,要考虑后台释放内存的开销,还要考虑其他因素,比如 Java/C#中字符串相加和C++中strcpy的巨大效率差异)。
另外,开发效率也是首先需要考虑的,这方面,c#比c++好。
至于,你选择哪种开发工具并不是本文要讨论的,具体应用不同,平台不同,开发工具自然不同。
下面开始介绍最简单的测试.
硬件环境:Dell Inspiron 3800 G700GT 笔记本电脑 CPU/PIII/700,ROM/128MB,HD/12GB。
软件环境:Windows 2000 + SP2,.NET平台 + Visual Studio.NET,Office XP。
所有的测试均是在命令行状态下以RELEASE模式编译程序,而非Visual Studio IDE集成开发环境,并在命令行状态下执行程序。没有对编译过程进行任何优化。
Hello World
Hello World测试程序主要是评测加载一个程序及其运行时环境所用的时间。C++的程序运行需要C运行库,从所周知,这个库是相当轻量级的。而C#程序的运行必须要加载.NET框架,从目前的情况看,这个框架无庸置疑不是一个轻量级的。
Hello World程序的C++代码如下: 代码一:helloworld.cpp
#include
int main(int argc, char *argv[])
{
std::cout << "Hello World" << std::endl;
return 0;
};
Hello World程序的C#代码如下: 代码二:helloworld2.cs
using System;
namespace HelloWorld
{
class Class1
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}
从这个测试的结果中,我们可以看到程序在相应环境中的加载时间。对于一个只完成简单任务的程序来说,无疑我们需要它能快速加载和退出。Perl脚 本是个有代表性的例子,运行这种需要大量的加载时间,从而导致其不能满足基于CGI且面向性能的Web站点的需要。这时,人们常常选择C++程序替 Perl脚本。但对于需要长时间处于激活状态的程序,其加载时间相对运行时性能来说就显得并不是那么很重要了。下表是十次测试的结果:
表一:Hello World 测试结果
序号 C++(~毫秒) C#(~毫秒)
1 40 1221
2 20 121
3 10 130
4 10 100
5 10 110
6 10 130
7 10 120
8 10 140
9 10 150
10 20 140
平均值 15 235
测试结果的精确程度由GetTickCount函数的精度决定。其精度大概在百分之一秒。从结果我们可以得出这样的结论。第一,冷启动.NET应 用过程所花费的时间比运行相同的应用多出一秒的时间。第二,启动后的程序再运行时,在C++代码大约是C#代码运行时间开销的十分之一。一般这种差别可以 忽略不计。
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾


