[英]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
類型已經超出了我的想法,但它顯然也有一生的關聯。
擴展@Josh的建議,我建議使用實習。
根據您的任務的內存或CPU密集程度,請選擇:
ID
< - > String
,在組件之間共享 String
- > Rc<str>
如果你買得起后者,我肯定會建議。 另請注意,您可以在Rc
: Rc<(MetricType, str)>
折疊MetricType
。
然后你仍然需要左右調用clone
,但每個只是一個廉價的非原子增量操作......並且移動到多線程就像交換Arc
for Rc
一樣簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.