gpt4 book ai didi

c# - 如何有效地写入长度前缀二进制数据

转载 作者:太空宇宙 更新时间:2023-11-03 16:36:51 25 4
gpt4 key购买 nike

我正在将二进制数据格式写入包含序列化对象图的文件。为了对错误更有弹性(并且能够调试问题),我正在考虑为流中的每个对象添加长度前缀。我目前正在使用 C# 和 BinaryWriter,但这是一个非常普遍的问题。

每个对象的大小在完全序列化之前是未知的,因此能够写长度前缀有多种策略:

  1. 使用足够空间的写缓冲区进行随机访问,并在对象序列化后在正确的位置插入长度。

  2. 将每个对象写入其自己的 MemoryStream,然后将缓冲区的长度和缓冲区内容写入主流。

  3. 在第一遍中为所有对象写入零长度,记住所有对象大小在文件中的位置(对象大小表),然后在第二遍中填充所有大小。

  4. ??

总大小(以及第一个/最外层对象的大小)通常约为 1mb,但也可能大至 50-100mb。我关心的是进程的性能和内存使用情况。

哪种策略最有效?

最佳答案

Which strategy would be most efficient?

确定这一点的唯一方法是测量。

我的第一直觉是使用 #2,但知道这可能会增加 GC 的压力(或者如果工作流超过 80Kb,则会对大对象堆造成碎片)。然而,#3 听起来很有趣,假设跟踪这些位置的复杂性不会影响可维护性。

最后你需要用你的数据来衡量,并考虑除非你有异常情况,否则性能将由网络或存储性能决定,而不是由内存中的处理决定。

关于c# - 如何有效地写入长度前缀二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8832541/

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