【发布时间】:2011-03-31 18:03:00
【问题描述】:
我有一组非常大的二进制文件,其中有几千个原始视频帧被顺序读取和处理,我现在正在寻求优化它,因为它似乎比 I/O 更受 CPU 限制.
目前正在以这种方式读取帧,我怀疑这是最大的罪魁祸首:
private byte[] frameBuf;
BinaryReader binRead = new BinaryReader(FS);
// Initialize a new buffer of sizeof(frame)
frameBuf = new byte[VARIABLE_BUFFER_SIZE];
//Read sizeof(frame) bytes from the file
frameBuf = binRead.ReadBytes(VARIABLE_BUFFER_SIZE);
在 .NET 中重新组织 I/O 以避免在每个帧中创建所有这些新的字节数组是否会有很大的不同?
由于我来自纯 C/C++ 背景,我对 .NET 的内存分配机制的理解很薄弱。我的想法是重写它以共享一个静态缓冲区类,该类包含一个非常大的共享缓冲区,其中一个整数跟踪帧的实际大小,但我喜欢当前实现的简单性和可读性,如果CLR 已经以某种我不知道的方式处理了这个问题。
任何意见将不胜感激。
【问题讨论】:
-
您是否运行了分析器以确保性能影响不是来自其他来源?还是您只是假设“大概就是这样”?
-
嗨大卫,我在它上面运行了几次性能分析器,这种特殊的方法是我最昂贵的方法。因此,我正在寻找这种“新字节 []”方法是否是 .NET 中明显的性能杀手。作为 C 程序员,这看起来类似于每个缓冲区的数千个“malloc”语句,这肯定会比重复使用的缓冲区慢。
标签: c# .net performance file binary