我很好奇调用Eq::eq
来比较两个大向量,与将两个向量序列化为一个字符串并比较输出字符串相比,要快多少。
我在这里做了一个基本的速度测试:https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=73fc1cc61873fa70566eb7b2bf0793f9
在release-mode中,对于包含10万个简单结构的向量,结果如下:
1.按Eq::eq(x, y)
比较:20毫秒
1.按serde_json::to_value(x) == serde_json::to_value(y)
比较:172毫秒
1.按serde_json::to_string(x) == serde_json::to_string(y)
比较:34毫秒
这些结果让我有点吃惊;我没想到一直序列化到字符串会和Eq::eq
的派生实现一样快。
我的速度测试在某些方面有缺陷吗?如果没有,那么如何解释为什么Eq::eq(x, y)
方法没有速度优势,因为它似乎应该有更少的工作要做?
1条答案
按热度按时间lvmkulzt1#
它是
vec.clone()
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=8f5badd5e2d1b7258eda6b384acd9205
通过参考文献后的结果:
Times. 1:1 2:127 3:39