我的應用程序的這部分顯示來自IP攝像機的圖片框中的實時圖像流。該流是一種典型的運動JPEG,格式爲多部分HTTP響應。重新使用位圖解碼JPEG數據
所有的代碼都被寫入,我的應用程序可以正常工作,CPU佔用率非常低(1-2%),並且內存佔用空間很大(逐漸增加,直到GC被觸發,然後全部回收回正常)。所以這是更多的優化問題,最好的實踐等,這不是必需的。
現在,我正在以正常的Bitmap.FromStream()
方式執行此操作,它會以60Hz爲每個幀生成一個全新的位圖。即使從運行時的角度來看它也沒問題,但作爲一名程序員,我感到很震驚。
如果我使用更多的手動方法,我會預先分配已知大小(320x240或640x480,取決於選項)的位圖,並將流解碼爲位圖,但我沒有看到a。 NET功能來做到這一點。我不得不使用我自己的JPEG解碼器,這是太多的工作,更多的二進制大小(這個東西已經是55MB的編譯代碼)。
所以我的問題是,我在這裏錯過了什麼?有沒有最好的方法來做這樣的事情?我提到的功能是完美的,但如果不可用,我會如何改進?
你在每個位圖對象上調用dispose()嗎?它將有助於內存管理,因爲Bitmap使用託管的非託管內存。 –
與我的問題無關,但沒有。自己處理它會把它帶到我的UI線程上,而不是讓GC在它自己的終結器線程上執行它。它沒有真正的收益,GC處理30-40mb英寸的位圖。 – Blindy