c# - c# 将 io 流转换为 byte[] 很慢
问题描述
毫无疑问,我的代码效果很好。问题是它太慢了!
如果我使用streamHelper 以字节为单位读取它或使用stream.Copyto,则大约需要相同的时间。很长时间!
必须有更快的方法吗?
如果我使用 FileStream 从文件路径读取相同的文件,它会在不到 1 秒的时间内处理。
从 Stream 转换为 Byte 大约需要 6 秒。非常感谢所有帮助。谢谢
byte[] byteArray = null;
// Read Data from Port Monitor
Stream inputStream = Console.OpenStandardInput();
using (MemoryStream ms = new MemoryStream())
{
inputStream.CopyTo(ms);
byteArray = ms.ToArray();
}
解决方案
您肯定可能会因标准输入而延迟。另外,如果您要完全重新读取数据,则可以增量读取而不是一次重新读取所有数据。
此外,如果数据很大,您将使用 CopyTo()(将流复制到流)和 ToArray()(将流复制到数组)复制两次。相反,您应该使用 inputStream.Read() 将数据从原始流直接读入缓冲区。
代码:
// Allocate a buffer the size of the whole stream
byte[] buffer = new byte[inputStream.Length];
// Set position at the beginning of our stream.
inputStream.Position = 0;
// Read all data into our buffer.
inputStream.Read(buffer, 0, buffer.Length);
请记住,某些流没有有效的“长度”属性,但这种情况很少见,我认为您的情况并非如此。请记住,这会更快(即使只是一点点),但您的瓶颈可能主要来自标准输入,因此只有在这种情况下才会有很大帮助。
推荐阅读
- javascript - 悬停时显示图像,不显示时消失
- python - 编码器输入与解码器输出不同
- windows - 验证服务进程是否符合“SERVICE_CONFIG_LAUNCH_PROTECTED”的条件
- docker - Docker 文件错误没有这样的文件或目录:unkno
- amazon-web-services - JWT 令牌中的无状态身份验证和权限
- flutter - 错误:配置项目“:app”时出现问题
- python - 使用已注册的转换器延迟反序列化 Python sqlite3.Row 列?
- reactjs - React Native 中的 Internet 推送通知
- reinforcement-learning - 适用于 2 人游戏的深度 Q 学习 (DQN)
- amazon-web-services - AWS 中用于微服务的内部通信