- 主题:出乎意料,C++和dotnet6比dotnet5慢10% (转载)
一开始的固定数组, 只分配一次, 因此对时间应该没有影响。
【 在 javaboy 的大作中提到: 】
: 你发个代码吧,肯定有人解惑的。
: c++的stl需要频繁的malloc/free,c#只malloc不free,所以是存在比C++快的情况的。
: free是重操作。
: ...................
--
FROM 123.112.64.*
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.*
高品质的C++代码肯定比C#快。
但是我想了解的是普通人写的,没有高度优化的“正常”代码。
这种情况下对大多数人才有意义。
【 在 javaboy 的大作中提到: 】
: 用代码说话吧。
: C++能用来实现一个C#,所以C++肯定不比C#慢。
:
--
FROM 123.112.64.*
dotnet的几个框架表现不一样, 你用的哪个?
我这里, dotnet6 跟c++差不多,dotnet5比c++快
【 在 xpzed 的大作中提到: 】
: 首先你的结论就不靠谱,用你贴的代码,我本机vs 2022都用x64 release编译测试,cs比cpp慢。
--
FROM 123.112.64.*
另外, c#目标架构改成anycpu试试
【 在 finlab 的大作中提到: 】
: dotnet的几个框架表现不一样, 你用的哪个?
: 我这里, dotnet6 跟c++差不多,dotnet5比c++快
:
--
FROM 123.112.64.*
很多情况赋值、拷贝还是避免不了,除非用指针。
但是用了指针,有时候写代码就会别扭。
比如一个对象重载了[], df[]就很自然, (*df)[], 或者df->at()都没那么自然。
不用指针吧, 每个对象要实现=、拷贝、移动一堆函数才能用。
总之是别扭。
【 在 z16166 的大作中提到: 】
: 超出机器字长的数据都要传引用/指针,不然就不要写C/C++然后怪C/C++慢了,哈哈
:
--
FROM 123.112.64.*
目标OS设成windows?
【 在 xpzed 的大作中提到: 】
: 我这dotnet6比cpp慢,改dotnet5和cpp基本无差别
: :
--
FROM 123.112.64.*
我是i5-8265U.比你的弱一些。
有C#的测试结果吗?
【 在 Bernstein 的大作中提到: 】
: 你用的什么cpu?
: 我在8500t和8559u上实现了一下(略有优化),8500t上大约6.5秒,8559u上大约5秒,前者为vs 2019,后者为ubuntu 20 g++10 O2
:
--
FROM 123.112.64.*
都开了, 对速度最优化
【 在 fanci 的大作中提到: 】
: 是不是没开优化:)
: - 来自 水木社区APP v3.5.3
--
FROM 123.112.64.*
别放空炮, 写一个明显比C#快的版本出来。
【 在 fanci 的大作中提到: 】
: 是的,惊呆了。
: 不会用赖语言,不过这可能是软件工程行业劣币驱逐良币的大趋势。
: - 来自 水木社区APP v3.5.3
--
FROM 123.112.64.*