我有一個非常大的二進制文件集,其中幾千個原始視頻幀正在順序讀取和處理,我現在正在尋找優化它,因爲它似乎是更CPU的約束比I/O限制。.NET二進制文件讀取性能
目前正在讀這樣的框架,我懷疑這是最大的罪魁禍首:
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,以避免用每一幀創建所有這些新的字節數組?
我對.NET的內存分配機制的理解很薄弱,因爲我來自純C/C++背景。我的想法是重新寫這個來共享一個靜態緩衝類,它包含一個非常大的共享緩衝區,其中包含一個整數來跟蹤幀的實際大小,但我喜歡當前實現的簡單性和可讀性,並且寧願保留它CLR已經以某種我不知道的方式處理這個問題。
任何輸入,將不勝感激。
您是否運行了一個分析器來確保性能命中並不來自其他來源?還是你剛剛去了,假設「這可能是它」? – 2010-08-18 19:11:12
嗨大衛, 我跑了幾次性能分析器,這種方法是我最昂貴的一個。因此,我期待看看這個「新的字節[]」方法在.NET中是否是一個明顯的性能殺手。作爲一名C程序員,這看起來與每個緩衝區的數千個「malloc」語句類似,肯定會比重用緩衝區慢。 – rnd 2010-08-18 20:16:59