У меня есть очень большой набор бинарных файлов, в которых несколько тысяч необработанных кадров видео последовательно читаются и обрабатываются, и сейчас я стремлюсь оптимизировать его, так как он выглядит более ограниченным по сравнению с вводом / выводом.
Кадры в настоящее время читаются таким образом, и я подозреваю, что это самый большой виновник:
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 для реорганизацииВвод / вывод, чтобы избежать создания всех этих новых байтовых массивов с каждым кадром?
Мое понимание механизма распределения памяти в .NET слабое, поскольку я исходил из чистого фона C / C ++.Моя идея состоит в том, чтобы переписать это, чтобы разделить класс статического буфера, который содержит очень большой общий буфер с целочисленным отслеживанием фактического размера кадра, но мне нравится простота и удобочитаемость текущей реализации, и я предпочел бы сохранить его, еслиCLR уже обрабатывает это каким-то образом, о котором я не знаю.
Любой вклад будет высоко ценится.