几年前,我们编写了csFastFloat ,一个 C# 库,用于更快地解析浮点数。给定字符串“3.1416”,它计算出二进制值 3.1416。
该库的功能相当于 C# 函数Double.Parse 。除了它运行得更快之外。
我们向 .NET 贡献了该库的大部分内容,从 .NET 7 开始:csFastFloat 库实际上是 .NET 的一部分。然而,标准库(.NET)有额外的开销。
Microsoft C# 运行时有一个新版本:.NET 9。我在 Apple M2 处理器上使用 .NET9 运行了基准测试:
数据集 | FastFloat.TryParseDouble | 双重解析 |
---|---|---|
加拿大.txt | 1.1GB/秒 | 0.3GB/秒 |
网格.txt | 0.9GB/秒 | 0.2GB/秒 |
合成.txt | 1.0GB/秒 | 0.3GB/秒 |
我发现使用 csFastFloat 相对于 .NET 库仍然有一个显着的好处:它可以快大约 3 倍。在 .NET 出现之前,差距接近 9 倍,因此 .NET 库确实变得更快了。
csFastFloat 的好处取决于您的数据,可能比我报告的要少。然而,如果您正在解析许多浮点数,您可能想尝试一下 csFastFloat。
您可以在 nuget 上找到 csFastFloat。 Sep使用的 csFastFloat 库可能是世界上最快的 .NET CSV 解析器。
原文: https://lemire.me/blog/2024/11/21/parsing-floats-at-over-a-gigabyte-per-second-in-c/