網路城邦
上一篇 回創作列表 下一篇   字體:
Clone會出錯不是Out of Memory,是Out of Range啦!
2020/10/29 06:02:56瀏覽651|回應0|推薦5

這是一個困擾我已經好幾年的問題,使用這個Clone方法切割部分影像的速度效率很高,但是三不五時就會跳出「記憶體不足」的訊息?但是明明記憶體就夠用啊?甚至圖形本身都不大,譬如我想從主影像中將小小的車牌區域切割出來,車牌那麼小,記憶體當然不可能不足!

最恐怖的是你怎麼測試看起來都沒事,放到線上連續使用幾天後就可能忽然出現這種錯誤讓程式當掉,我都被嚇死了!所以我寫了一個取代這個功能的自訂副程式,雖然不會出錯了,但是切割影像的速度沒這麼快,只能先求穩定再說了!但是剛剛要開始的億萬畫素車牌辨識專案必須對超大的影像做切割,繼續使用我自製的副程式就顯得太慢了!因此被迫回來面對老問題。

我上網搜尋發現我不是唯一的受災戶,這個問題導致的災情可說是哀鴻遍野!其實那些討論回覆意見裡面已經有我需要的正確解答了,我以前搜尋時其實也已經看到了,但是我一時沒有意會過來,所以多擔了好多年的心事與疙瘩。

簡單說,是這個錯誤訊息」本身寫錯了!我使用的Clone當掉的原因跟記憶體夠不夠一點關係都沒有!而是我指定切割的區域超過原圖的邊界了!如果錯誤訊息寫成Out of Range,像是超出陣列範圍的概念,我第一時間就可以知道問題所在將程式改好了!就是檢查指定切割的範圍不要超出原圖的範圍即可。我之前軟體中的Clone會意外當掉,是因為程式自己計算出應該切割一個原圖邊緣的車牌,算出來的車牌區域略為超出原圖而已!很容易防範的!

氣人的是:這個莫名其妙寫錯的錯誤訊息歷經這麼多年,.NET Library版本1.0到現在的4.7都快20年了!在最新版的Visual Studio 2019執行時這個錯誤還是一模一樣!微軟公司的維護團隊真的有夠打混擺爛的!他們都不上網看災情的嗎?其實Clone本身也可以自動忽略這個錯誤,超出原圖的部分空白就好了嘛!

抱怨完畢,但也很高興終於解決了一個技術障礙,繼續開工囉!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:http://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=152080313