gpt4 book ai didi

rust - 如何更好地存储字符串以避免出现许多克隆?

转载 作者:行者123 更新时间:2023-11-29 08:00:28 24 4
gpt4 key购买 nike

我正在使用 tokio 的 UdpCodec 特点:

pub trait UdpCodec {
type In;
type Out;
fn decode(&mut self, src: &SocketAddr, buf: &[u8]) -> Result<Self::In>;
fn encode(&mut self, msg: Self::Out, buf: &mut Vec<u8>) -> SocketAddr;
}

我的关联类型 In(SocketAddr, Vec<Metric>) . Metric定义为:

#[derive(Debug, PartialEq)]
pub struct Metric {
pub name: String,
pub value: f64,
pub metric_type: MetricType,
pub sample_rate: Option<f64>,
}

我使用自有字符串来避免关联类型的生命周期限制。不过我也做HashMap使用这些指标名称进行查找和插入,这涉及大量克隆,因为我在其他函数中借用了指标。

我怎样才能更好地在这个 Metric 中存储一个字符串?键入以避免许多低效的克隆?使用 Cow type 已经在我的脑海中浮现,但它显然也与终生相关。

最佳答案

扩展@Jos​​h 的建议,我建议使用实习。

根据您的任务对内存或 CPU 的密集程度,做出选择:

  • 双 HashMap :ID <-> String , 在组件之间共享
  • 单个 HashMap :String -> Rc<str>

如果您负担得起后者,我绝对建议您这样做。另请注意,您可能会弃牌 MetricTypeRc 内: Rc<(MetricType, str)> .

那你还需要调用clone左和右,但每一个都只是一个廉价的非原子增量操作......并且移动到多线程就像交换 Arc 一样简单对于 Rc .

关于rust - 如何更好地存储字符串以避免出现许多克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com