因此,我有一個用C++編寫的應用程序,運行在Ubuntu 12.04上,最初從數據庫讀取一些數據,然後觀察目錄中的文件。當它們出現時,它會處理它們,然後將一些數據寫回到數據庫。隨着時間的推移,CPU使用率逐漸增加,大約爲每天5%左右,但內存使用率保持不變。從邏輯上講,它看起來是這樣的:逐漸增加CPU使用率而不增加內存。想法?
-open db connect
-while(keep_running())
- check dir for new files (I know - it should use the watch system and callbacks, but..)
- process files
- (possibly) update db
-end while
-close db connect
在哪裏,直到SIGINT
的代碼並不複雜,所以我在爲CPU使用率損失keep_running()總是真 - callgrind期待權。我懷疑數據庫連接,但沒有在其他類似的應用程序中表現出這種行爲。我的下一步是將valgrind附加到一個流程並讓它運行幾天 - 同時,我可以嘗試的其他任何事情?
那麼也許優化更新查詢?它目前是INSERT INTO(blah)VALUES(blah)有沒有更好的方法? – 2013-02-28 16:01:39
@ codeMonkey_39。 。 。你的問題是一般的。我的答案是一般的。從你說的話來看,CPU數量的增加是由於數據量增加。有可能使代碼更有效的方法,但整個應用程序的分析超出了本論壇的範圍。 – 2013-02-28 16:08:04
因此,對於一個大型表項的INSERT需要比對較小的INSERT更長的時間?我對數據庫瞭解不多,但這似乎與直覺相反...... – 2013-02-28 16:23:10