【发布时间】:2023-01-17 23:57:58
【问题描述】:
我正在寻找 BitConverter 的更快替代品:
但!在“热循环”中:
//i_k_size = 8 bytes
while (fs.Read(ba_buf, 0, ba_buf.Length) > 0 && dcm_buf_read_ctr < i_buf_reads)
{
Span<byte> sp_data = ba_buf.AsSpan();
for (int i = 0; i < ba_buf.Length; i += i_k_size)
{
UInt64 k = BitConverter.ToUInt64(sp_data.Slice(i, i_k_size));
}
}
我将指针与转换集成在一起的努力使性能变得更差。指针可以用来让它更快吗和跨度?
【问题讨论】:
-
i_k_size是否等于sizeof(UInt64)? (即它是 8 吗?) -
顺便说一句,不一致的支撑、非常规的缩进和非常规的变量名有点让人分心——至少对我来说是这样,我怀疑其他人可能也有同感。
-
@MatthewWatson 是的。 i_k_size = 8 字节
-
“我看不出大括号有问题”——
while循环的“行尾大括号”与for循环的“行首大括号”对你来说似乎并不矛盾? (至于“我希望你能回答问题的要点”——如果我的建议有助于让你的问题对其他 10 个用户更有吸引力,那不是更有用吗?) -
@YuriiPalkovskii,您实际上不能假设您在 .Net Core 3+ 中从
Stream.Read获得了与您请求的字符一样多的字符(来自 .Net Framework 的重大更改)。你需要了解Read返回了多少个字符,并可能继续调用Read直到您获得所有数据(或者只是在您的流顶部使用BinaryReader,这保证了它)。
标签: c# performance loops slice bitconverter