我很好奇调用Eq::eq
比较两个大向量比将两个向量序列化为字符串并比较输出字符串要快多少。
我在这里做了一个基本的速度测试:https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=73fc1cc61873fa70566eb7b2bf0793f9
对于包含10万个简单结构的向量,在释放模式下的结果:
Eq::eq(x, y)
比较:20msserde_json::to_value(x) == serde_json::to_value(y)
比较:172msserde_json::to_string(x) == serde_json::to_string(y)
比较:34ms
这些结果让我有点惊讶;我没想到序列化到一个字符串会几乎和Eq::eq
的派生实现一样快。
我的速度测试在某些方面有缺陷吗?如果不是,那怎么解释为什么Eq::eq(x, y)
方法没有速度优势,因为它看起来应该少做很多工作?
是vec.clone()
https://play.rust-lang.org/?version=stable&模式= release&版= 2021,要点= 8 f5badd5e2d1b7258eda6b384acd9205
传递引用后的结果:Times. 1:1 2:127 3:39