我有個很急問題,就是我在indytcpserver的 onExecute 中每接收一個TCP文字資訊都會動態創建一個TADOConnection ,把文字寫入資料庫,完成寫入資料庫后斷開資料庫連接和把TADOConnection 用 FREE 釋放。問題就是程式大約運行12天左右就無法連接資料庫,關掉程式再開程式也不行,必須重啟電腦才能正常連接資料庫, 請問這是什么原因?? 用的是XP系統,資料庫sql2000
uj5u.com熱心網友回復:
重新開機,故障解決,說明關鍵是記憶體問題。問題有兩方面:一、作業系統問題
作業系統本身的故障。
二、服務器代碼問題
1、內在占用了,釋放不完全。
2、執行緒故障,我的服務器程式就被執行緒錯誤搞慘了。
無代碼,憑空想象,僅供參考。
uj5u.com熱心網友回復:
為什么要每個連接單獨一個資料庫連接,資料庫連接一般只要1到2個長連接就行,然后通過佇列進行服務。uj5u.com熱心網友回復:
記憶體滿了還是連接數滿了uj5u.com熱心網友回復:
為什么不重啟sql server服務器試試呢?uj5u.com熱心網友回復:
即使是確定了sql server服務因句柄耗盡出現的問題,你這種寫入方法也是存在問題的。
簡單一點的改進,可以將需要寫入的內容,放到一個List里面。
在另一個執行緒,讀取List的內容,執行寫入操作。 一個TADOConnection 搞定,也不用重復創建。
uj5u.com熱心網友回復:
建議不要創建TADOConnection,而是使用一低點全域的靜態的TADOConnection。試試。uj5u.com熱心網友回復:
這個時候,就要長連資料庫,因為程式是運行在服務器端的。從現象上看,應該是資源被耗盡了。
程式關掉后,確定程式的行程是否還存在?
如果不存在 , 則可能是資料庫的原因,但最終,還是你的程式問題。
如果存在,則可能是程式。
一句話,就是程式寫的有問題。
uj5u.com熱心網友回復:
Server就不要總是創建連接了,使用一個靜態的長連接。通過訊息或者執行緒同步來操作。uj5u.com熱心網友回復:
連接數問題。我遇到過轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/82158.html
標籤:數據庫相關
上一篇:delphi 動態創建TClientSocket問題
下一篇:Oracle快速入門(觸發器)
