下面是用 c++ 和 c# 编写的两个代码部分,它们做的事情完全相同:
#include <stdio.h>
int main(int argc, char *argv[]) {
char p[1000000];
unsigned int i,j;
unsigned long long s=0;
for(i=2;i<1000000;i++) p[i]=1;
for(i=2;i<500000;) {
for(j=2*i;j<1000000;j+=i) p[j]=0;
for(i++;!p[i];i++);
}
for(i=3,s=2;i<1000000;i+=2) if(p[i]) s+=i;
printf ("%lld\n",s);
return 0;
}
时间:0.01s 内存:2576 kB
using System;
namespace ConsoleApplication4
{
internal class Program
{
private static void Main(string[] args)
{
var p = new byte[1000000];
ulong i, j;
double s = 0;
for(i=2;i<1000000;i++)
p[i]=1;
for(i=2;i<500000;)
{
for(j=2*i;j<1000000;j+=i)
p[j]=0;
for(i++;p[i]==0;i++);
}
for(i=3,s=2;i<1000000;i+=2)
if(p[i]!=0) s+=i;
Console.WriteLine(s);
}
}
}
时间:0.05s 内存:38288 kB
我如何改进 C# 代码以向我的同事证明 C# 可以像 C++ 一样快?
如您所见,C# 执行时间增加了 5 倍,内存消耗增加了 15 倍。
最佳答案
在Release模式下编译运行。在 Release模式下构建和运行时,我从 C# 版本中得到了 0.01 秒。就内存消耗而言,您正在将苹果与橙子进行比较。托管环境将消耗更多内存,因为它托管 CLR 和垃圾收集器,它们并非没有成本。
关于大型数组的 C# 内存优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085109/