1. 程式人生 > >最近解決的一個記憶體洩漏問題

最近解決的一個記憶體洩漏問題

最近解決了一個記憶體洩漏的問題,問題的起因是在測試過程中施加了極大的壓力,以至於CPU的利用率一直維持在100%。此時出現了大量的記憶體洩漏。

當時從程式碼中沒有找到原因,後來通過其他方面的努力,找到原因如下:當時使用的機制是Windows Post Message。在某個執行緒中new一塊Buffer,通過PostMessage傳遞到另外一個執行緒中delete.100CPU的狀態下,這部分事件沒有足夠的時間片處理,導致事件堆積越來越多,以至於windows丟棄事件,從來buffer沒有delete,最終記憶體洩漏。

Windowevent queue的長度設定如下:

Windows 2000: There is a limit of 10,000 posted messages per message queue. This limit should be sufficiently large. If your application exceeds the limit, it should be redesigned to avoid consuming so many system resources. To adjust this limit, modify the following registry key:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Windows/USERPostMessageLimit.

The minimum acceptable value is 4000.

雖然可以通過這個辦法增加queue的長度緩解問題,但是沒有辦法最終解決問題。所以這種做法是不合理的。