我的程序解析了足够大的json文档(30MB),
在CPU速度较慢的机器上需要70毫秒,我想加快处理速度,
我发现27%的解析发生在我的foo_document_type_deserialize
中,
是否有可能改善此功能,是否有办法跳过String
的{{1}}分配?
我完全确保代表枚举值的字符串不包含特殊的json字符,例如let s = String::deserialize(deserializer)?;
,因此使用未转义的字符串应该是安全的。
\b \f \n \r \t \" \\
答案 0 :(得分:4)
您编写的自定义隐式格式的形式为serde_derive可以生成:
#[derive(Deserialize, Debug)]
pub enum FooDocumentType {
#[serde(rename = "Text", alias = "Type not detected", alias = "---")]
Unknown,
#[serde(rename = "tir lim bom bom")]
Var1,
#[serde(rename = "hgga;hghau")]
Var2,
#[serde(rename = "hgueoqtyhit4t")]
Var3,
}
当我测量以下内容时,所得到的派生代码不会分配内存,并且在快速微基准测试中,与您的代码相比,大约快2倍:
serde_json::from_str::<FooDocument>(r#"{"type":"hgga;hghau"}"#).unwrap()