|
|
1
16
如果你所有的数据都是
如果是ASCII码,那么您可以比ASCII码稍微快一点
然后你会做一些类似的事情:
不过,这是相当绝望的优化。我会坚持
|
|
|
2
9
以下是Encoding.ASCII.GetBytes的实际实现,仅供参考:
|
|
|
3
4
相关的单指令多数据加速功能仅对中的有能力CPU启用
x64模式
,但除此之外,.NET在
. 虽然不是SIMD加速,但使用合适的
接下来是主工作循环体。请注意序言循环,它将目标与16字节内存边界对齐,如果需要,可以通过字节复制最多15个源字节。这确保了主管道的最有效运行。”
四边形
“使用单对SIMD进行循环
事实上,这就是全部!它就像一个符咒,正如你在下面看到的,它确实“尖叫” 如广告所示 JIT为“发布”构建生成 .NET 4.7.2
性能测试结果:
试验包括所有试验装置的相同工作和所有试验装置相同结果的验证。测试字节是随机的,仅限ASCII码(
Relative ticks, normalized to best result
.NET Framework 4.7.3056.0 x64 (release)
iter naive win-1252 ascii utf-8 simd
------- ----------- ------------ ------------ ------------ -----------
10000 | 131.5 294.5 186.2 145.6 100.0
20000 | 137.7 305.3 191.9 149.4 100.0
30000 | 139.2 308.5 195.8 151.5 100.0
40000 | 141.8 312.1 198.5 153.2 100.0
50000 | 142.0 313.8 199.1 154.1 100.0
60000 | 140.5 310.6 196.7 153.0 100.0
70000 | 141.1 312.9 197.3 153.6 100.0
80000 | 141.6 313.7 197.8 154.1 100.0
90000 | 141.3 313.7 197.9 154.3 100.0
100000 | 141.1 313.3 196.9 153.7 100.0
gcServer=False; LatencyMode.Interactive; Vector.IsHardwareAccelerated=True
优先权
x64
平台启用JIT优化且SIMD可用时,没有竞争。SIMD代码的运行速度比下一个竞争者快约150%。这个
前面我提到,测试数据大小的分布强烈地偏向于零。如果没有这一步骤——这意味着大小从0到1048576字节(平均测试大小512K)的均匀分布——SIMD将继续超过软件包,而所有其他单元的性能都相对较好 更糟的 naive 153.45% win-1252 358.84% ascii 221.38% utf-8 161.62% simd 100.00% 至于非SIMD(仿真)情况,UTF-8和SIMD非常接近——通常彼此相差不超过3-4%——并且远远好于其他情况。我发现这一结果令人倍感惊讶:这个 UTF8Encoding source code 是如此之快(大量的快速路径优化),而且通用SIMD仿真代码能够与目的优化代码相匹配。
增编:
N
)使用
|
|
|
4
1
你想优化什么?中央处理器?带宽? 如果要优化带宽,可以尝试事先压缩字符串数据。 首先,在您尝试在如此低的级别上进行优化之前,分析您的代码,找出慢位是什么。 |
|
|
5
1
我想GetBytes()函数已经为此进行了很好的优化。我想不出任何提高现有代码速度的建议。
我之所以这么想 更快的是它跳过了编码步骤。我也不完全确定这是否能正常工作。但是你可以试试看。当然,如果您需要ascii编码,那么这不会有帮助。 我只是有另一个想法。我相信这段代码返回的字节数是使用ASCII编码的GetBytes的两倍。原因是.NET中的所有字符串都在幕后使用unicode。当然,Unicode每个字符使用2个字节,而ASCII仅使用1个字节。因此,在本例中可能不使用BinaryFormatter,因为通过套接字发送的数据量将增加一倍。 |
|
|
6
1
|
|
|
7
0
正如其他人所说,编码类已经针对该任务进行了优化,因此可能很难使其更快。你可以做一个微观优化:使用
|
|
|
8
0
我建议你描述一下你在做什么。我发现将字符串转换为字节数组的速度在吞吐量方面比套接字本身的速度更大的问题值得怀疑。 |
|
|
9
0
还有一个提示:我不知道如何创建初始字符串,但请记住StringBuilder.Append(“something”)比myString+=“something”这样的东西要快。
本 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |