簡體   English   中英

我怎樣才能更好地存儲字符串以避免許多克隆?

[英]How can I better store a string to avoid many clones?

我正在使用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類型已經超出了我的想法,但它顯然也有一生的關聯。

擴展@Jos​​h的建議,我建議使用實習。

根據您的任務的內存或CPU密集程度,請選擇:

  • 雙重哈希映射: ID < - > String ,在組件之間共享
  • 單個散列映射: String - > Rc<str>

如果你買得起后者,我肯定會建議。 另請注意,您可以在RcRc<(MetricType, str)>折疊MetricType

然后你仍然需要左右調用clone ,但每個只是一個廉價的非原子增量操作......並且移動到多線程就像交換Arc for Rc一樣簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM