将数据读入内存与跳过读取

Reading data into memory vs skipping reading

提问人:base12 提问时间:5/6/2022 更新时间:5/6/2022 访问量:44

问:

在丢弃之前读取数据结构并访问字段与读取类型并一起跳过结构之间是否存在很大的速度差异?

我正在为工具之间的数据接口设计一个 TLV 类型的接口。

该工具输出的结构可能是服务 1 或服务 2,可以打开也可以关闭。我登陆的界面是Type | Length | data_structure

现在,接收这些 TLV 的一些工具只关心正在打开的东西,可以忽略关闭的东西。某些工具只关心服务 1 并且正在打开的内容。

我决定将打开/关闭作为类型字段的一部分。它们内部包含一个字段,用于确定它们是服务 1 还是服务 2。data_structure

我的问题是,我应该将服务 1/2 也编码到类型字段中,还是只将其编码在 ?data_structure

从本质上讲,我可以有类型

  1. 开启
  2. 关闭

  1. 服务 1 开启
  2. 服务 1 关闭
  3. 服务 2 开启
  4. 服务 2 关闭

我的想法是,在类型字段中使用服务 1/2 将使不关心服务 2 的工具的界面更快。他们可以读取类型,然后将文件指针移动到下一个 TLV,而不是将结构读取到内存中,访问服务类型,然后丢弃。这种推理准确吗?

C++ C TLV

评论

4赞 Barmar 5/6/2022
差异可以忽略不计。瓶颈是 I/O,处理它的方式无关紧要。
0赞 Jeremy Friesner 5/6/2022
我认为 Barmar 可能是对的,但这似乎很容易进行原型设计和测试以找出答案。

答:

0赞 Yuanhui 5/6/2022 #1

绝对建议您将类型和数据分开。它是一个格式为“Type |长度 |data_structure'。无论如何,任何时候都不要违反你的规则。

顺便说一句,通过使用数据指针,如果可能的话,您不需要复制数据。这样可以节省您的处理时间。