• 您的位置我爱Aspx >> VC.Net >> C#和C++的速度大比拼(第一部分)
  • C#和C++的速度大比拼(第一部分)

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:49:04  关键字:c#
  • 埃拉托色尼过滤算法的C++代码如下:

    代码三:sieve.cpp #include <windows.h> #include <iostream> #include <algorithm> #include <vector> #include <cstdlib> using namespace std; int main(int argc, char *argv[]) { if (argc != 2) { std::cerr << "Usage:\tsieve [iterations]\n"; return 1; }; size_t NUM = atoi(argv[1]); DWORD dw = ::GetTickCount(); vector primes(8192 + 1); vector::iterator pbegin = primes.begin(); vector::iterator begin = pbegin + 2; vector::iterator end = primes.end(); while (NUM--) { fill(begin, end, 1); for (vector::iterator i = begin; i < end; ++i) { if (*i) { const size_t p = i - pbegin; for (vector::iterator k = i + p; k < end; k += p) { *k = 0; } } } } DWORD dw2 = ::GetTickCount(); std::cout << "Milliseconds = " << dw2-dw << std::endl; return 0; }下面是埃拉托色尼过滤算法的C#代码: 代码四: using System; namespace Sieve { class Class1 { static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Usage:\tsieve " "[iterations]"); return; } int NUM = int.Parse(args[0]); long dt = DateTime.Now.Ticks; int[] primes = new int[8192+1]; int pbegin = 0; int begin = 2; int end = 8193; while (NUM-- != 0) { for (int i = 0; i < end; i++) { primes[i] = 1; } for (int i = begin; i < end; ++i) { if (primes[i] != 0) { int p = i - pbegin; for (int k = i + p; k < end; k += p) { primes[k] = 0; }; } }; }; long dt2 = DateTime.Now.Ticks; System.Console.WriteLine("Milliseconds = {0}", (dt2-dt)/10000); } } } 测试的结果并不足以说明那一种环境更快。在这两个语言的测试中,我旨在说明哪一种语言的构造对测试的结果影响最大。当你基于性能的考虑来选择某种语言时,应该直接考虑心需要哪种类型的性能。在这里,埃拉托色尼过滤算法测试的是循环构造以及比较逻辑和整数基本类型的处理。下面是十次测试,每次进行10000次重复的测试结果:

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:C#和C++的速度大比拼(二)
    下一篇:关于杠杆长度变化的问题(C问题)