我有一個不斷需要檢查是否有工作要做的函數,它以下列方式去了解:這是爲什麼導致堆棧溢出?遞歸函數和SQLite
僞代碼:
Class SeperateThread{
function Start(){
DoWork();
}
function DoWork(){
New DBContext;
DBContext.GetWorkFromTables();
Perform work in Extra Seperate Threads if there is work to do...
NotifyWhenTasksAreFinished();
}
NotifyWhenTasksAreFinished(){
(Loop)Check if tasks are finished in seperate thread
If Tasks are finished
Break loop, wait a few seconds and....
DoWork();
}
}
我使用SQLite和獲得一個堆棧溢出SQLITE.interop.dll
SQLITE工作完成的唯一地方是DBContext.GetWorkFromTables()
。
這一切工作正常幾個小時...幾個小時後... APPCRASH與sqlite.interop.dll內的堆棧溢出。
任何人都可以解釋這是什麼原因,也許是一種解決方法? 我懷疑遞歸函數與它有關...
難道是DBContext不會自動處置,也許這是原因?
我使用telerik數據訪問作爲ORM,但它有點像實體框架一樣工作。
'DoWork'調用'NotifyWhenTasksAreFinished'調用'DoWork' ...這很可能與SQLite無關。 SQLite似乎是罪魁禍首的可能原因是堆棧溢出異常就像用水填滿你的玻璃杯。它不一定是你放入杯子的最後一滴,你認爲溢出的原因,這是你之前投入的100億滴。 –
你相信遞歸可能是原因嗎?這是不是一般錯誤地執行無效或是因爲一些物體可能不會被丟棄?如果它是錯誤的,會提出什麼解決方法?感謝您的迴應。 – user1841243