如何更好地存储字符串以避免多次克隆?

2023-12-12

我用的是东京的UdpCodec trait:

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 is a (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 密集程度,在以下选项之间进行选择:

  • 双哈希映射:IDString, 组件之间共享
  • 单个哈希映射:String -> Rc<str>

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更好地存储字符串以避免多次克隆? 的相关文章

随机推荐

  • maxlength 在 ckeditor angularjs 指令的文本区域中不起作用

    我已经使用 ckeditor 插件在 angularjs 中创建了一个应用程序 我已经为 ckeditor 创建了一个指令 该应用程序工作正常 但问题是我需要将最大字符长度设置为 50 所以我把maxlength 50 但它不起作用 谁能告
  • 为什么ArrayDeque比LinkedList更好

    我试图理解为什么Java的ArrayDeque比Java的LinkedList更好因为它们都实现了 Deque 接口 我几乎没有看到有人在他们的代码中使用 ArrayDeque 如果有人更深入地了解 ArrayDeque 的实现方式 那将会
  • JavaScript 中的 window.location.href 与 window.location.replace 与 window.location.assign

    有什么区别 window location href http example com window location replace http example com window location assign http example
  • Microsoft Azure:添加用户并将其映射到数据库+添加数据库角色

    我是 Azure 的新手 所以请耐心等待 使用 SSMS 中的导出工具 我设法将所有表从本地数据库复制到 Azure 现在最重要的部分 添加用户并将其映射到数据库还没有解释 还向数据库添加角色 也许它被解释了 但我真的不明白其中的一个字 在
  • React router History.push 回退到 404 路由

    每次我执行history push path url 更改为正确的路径 但 404 Page Not Found 组件被渲染 indes tsx import React from react import ReactDOM from re
  • ggplot 折线图中的可变标签位置

    我创建了以下数据框摘要dplyr structure list maxrep c 7L 7L 8L 8L 9L 9L 10L 10L 11L 11L 12L 12L 13L 13L 14L 14L 15L 15L 16L 16L 17L 1
  • PHRets:使用 PHP 下载房地产列表照片

    我正在尝试创建一个 PHP PHrets 脚本 该脚本从特定区域下载所有房地产列表信息 并将所有列表数据 CSV 文件和照片 保存在我的网络服务器上 注意 单个列表最多可以包含 20 张照片 我正在使用 PHrets 检索 MLS 列表数据
  • 如何从 jacoco.exec 中提取可读格式的报告?

    我有一个 jacoco agent 为我的 Maven 项目 Java 生成的文件 名为jacoco exec 如何将此文件转换为人类可读的格式 HTML XML 我相信这在JaCoCo 官方文档 特别是有jacoco maven plug
  • Java 默认荧光笔

    我正在使用DefaultHightlighter DefaultHightlighterPainter突出显示 java 文本窗格中的文本 我想删除所有突出显示 可能有多个突出显示的字符串 并希望它返回突出显示已被删除的字符串的位置 所以显
  • 如何检测表单何时被拖动?

    我有一个带有显示标题栏的 Form 对象 我需要一种纯托管方式 无 P Invoke Mono 和 NET 兼容 最好是 NET 2 0 API 来检测何时FORM其本身开始被拖动 改变位置以及何时被放下 不是任何内容 我过去在 Mono
  • 使用 ant 调试我的 Web 应用程序

    我目前正在使用 Java EE 技术和 Eclipse 作为 IDE 开发 MVC 应用程序 为了运行我的服务器并部署我的应用程序 我使用 ANT 我想知道如何通过 ant 工具或 eclipse 调试我的 Java 代码 添加以下内容jv
  • Jenkins Java:获取开始构建的用户

    Under http JENKINS NAME job JOB NAME BUILD NUMBER 我可以看到由用户 USER NAME 启动 我想从我的 java 应用程序中获取该用户名 任何帮助深表感谢 您可以进行 http 调用来获取
  • R 中 NA 值的问题

    我觉得这应该很简单 我查过互联网 但我不断收到错误消息 我过去做过很多分析 但对 R 和编程还是新手 我有一个非常基本的函数来计算 x 列数据的平均值 columnmean lt function y nc lt ncol y means
  • Eclipse WAR 有 2 个项目?

    我正在尝试从 Eclipse 导出 WAR 文件 我有一个 动态网络项目 但我需要为另外两个项目创建类 一个是普通 Java 项目 另一个是另一个 Web 项目 因此 在 构建配置 中 我告诉它添加其他项目 并在 订单和导出 页面上单击框以
  • 将 Excel 工作表导出到 Access 表 (.accdb)

    我的 Excel 中有一个宏与我的工作表之一上的命令按钮相关联 单击时 我尝试将工作表 FeedSamples 中的数据导出到名为 ImportedData 的 Access 数据库表中 有人可以帮助我吗 我尝试了网上的多个例子 但没有成功
  • 查询中的字段别名,nzsql

    我在 Netezza 工作 或者 你知道 用于分析的纯数据 nzsql 但我认为这是一个 ANSI SQL 问题 这个问题太基础了 我什至不知道如何搜索 CREATE TEMPORARY TABLE DEMO1 AS SELECT SMOR
  • 相当于 PowerShell 中的 *nix 折叠

    今天 我有几百个项目 来自 SQL 查询的 ID 需要将它们粘贴到另一个查询中以便分析师读取 我需要 nixfold命令 我想将这 300 行格式化为每行多个数字 并用空格分隔 我会用fold w 100 s nix 上的类似工具包括fmt
  • 使用 javascript 移动 Div 框

    我正在尝试创建一个 300 像素 x 300 像素的 div 框 当用户将鼠标放在该框上时 该框会移动几个像素 唯一的事情是 当 div 到达浏览器大小的末尾时 我希望它开始向其他方向移动 而不是使窗口滚动 任何帮助将不胜感激 div st
  • 如何编写 bash 脚本以使用拆分和制表符在 Vim 中打开多个文件?

    我正在尝试使用 bash 脚本自动化一些体力劳动 基本上我在 1 个终端窗口 只有一个终端选项卡 中使用 Vim 打开多个文件 使用多个 split vsplit 和选项卡 我现在将描述一个一般情况来解释我通常手动执行的操作 我使用 3 个
  • 如何更好地存储字符串以避免多次克隆?

    我用的是东京的UdpCodec trait pub trait UdpCodec type In type Out fn decode mut self src SocketAddr buf u8 gt Result