C# 不给太面子。
用了linq和lambda后, 性能急剧下降,
在我的耐心范围内, 没有出结果。 50万的范围,也要8秒。 5000万,估计时间要多几个数量级。
我指定强制inline,也没效果。 看来lambda函数没有被优化掉。
不知道C++的lambda 优化怎么杨。
public static int intperf2(int n)
{
List<int> buf = new List<int>();
buf.Add(2);
for (int i = 3; i <= n; i++)
{
if (buf.Any([MethodImpl(MethodImplOptions.AggressiveInlining)](int x) => i % x == 0))
continue;
else
buf.Add(i);
}
return buf.Count;
}
【 在 hgoldfish 的大作中提到: 】
: c# 和 java 的计算代码本来就不慢。java 还需要 jit 预热,c# 在编译的时候听说可以直接编译到 native
: 或许你再试试,c# 里不用 int[] 而是 vector<> ,并且改成从外部传进来。对于稍复杂的对象,c# 这种虚拟机语言存取内存的低效就能看出来了。
: 如果是 io 代码,更容易看出虚拟机语言的问题。一是虚拟机语言的序列化低效,二是虚拟机语言占用的内存偏多。所以用 cpp/go 写后端服务器,正常都会比 java/c# 快且省内存。
: ...................
--
FROM 123.112.64.*