gpt4 book ai didi

c# - 改进编码周期

转载 作者:行者123 更新时间:2023-11-30 19:56:39 25 4
gpt4 key购买 nike

我有这个对象:Dictionary<byte, BitArray>()

它充满了霍夫曼树的值。要将流的每个字节编码为霍夫曼二进制值,我这样做:

// Bytes are the bytes to be encoded, encoded is the output string
foreach (byte c in Bytes)
{
encoded += _translationTable[c].ToBitsString();
}

这是扩展方法:

//Converts the bitarray in a binary string
public static string ToBitsString(this BitArray bitArr)
{
string retStr = string.Empty;

foreach (bool bit in bitArr)
{
retStr += (bit) ? "1" : "0";
}

return retStr;
}

编码 64kb 的数据需要将近 3 秒,有没有办法更快地达到这个结果?

最佳答案

这听起来像是在循环执行字符串连接。那是一个 very inefficient way of building a new string .我怀疑你想要:

var builder = new StringBuilder();
foreach (byte c in Bytes)
{
builder.Append(_translationTable[c].ToBitsString());
}
var encoded = builder.ToString();

现在我们可以看到 ToBitsString 做了什么,很容易重写它以接受 StringBuilder 附加到:

public static void AppendBitsTo(this BitArray bitArray, StringBuilder builder)
{
foreach (bool bit in bitArray)
{
builder.Append(bit ? "1" : "0");
}
}

那么循环体就是:

_translationTable[c].AppendBitsTo(builder);

关于c# - 改进编码周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305176/

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