2013-09-30 69 views
0

我似乎有內存泄漏。我在推薦'使用'方法的stackoverflow上找到一篇文章,但這似乎並沒有解決這個問題。c#應用程序中的ODBC泄漏內存

我正在使用紅門內存分析器,它顯示了非管理內存不斷增加的增加。

這是簡單的應用程序,我測試做:

namespace TimerDebug 
{ 
public partial class TimerDebug : ServiceBase 
{ 
    public TimerDebug() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     // Create Timer 
     Timer MyTimer = new Timer(500); 
     MyTimer.Elapsed += MyTimer_Elapsed; 

     // Start Timer 
     MyTimer.Start(); 

    } 

    void MyTimer_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     using (var C = new OdbcConnection("Dsn=MyFireReport;")) 
     { 

      C.Open(); 

     } 

     OdbcConnection.ReleaseObjectPool(); 
    } 

    protected override void OnStop() 
    { 
    } 
} 
} 

是否有人知道如何解決這一問題? 謝謝。

+0

我正在使用Paradox數據庫驅動程序。 – Anonymous

+0

您是否嘗試在'using'塊中放置'OdbcConnection.ReleaseObjectPool();'? – jbl

+0

這個想法是odbcconnection對象只在using語句中存在,因此放置release對象池後確保該對象已被處置並因此關閉,準備釋放。 – Anonymous

回答

0

OdbcConnection.ReleaseObjectPool();是造成這種情況的原因。我遇到了一些嚴重的問題,不斷增加的句柄和內存泄漏導致DEP關閉我的軟件。 使用SQLClient中的模擬器可以觀察到同樣的問題,甚至在使用此語句之前關閉或處置連接也沒有幫助。

我已經將OdbcConnection.ReleaseObjectPool();僅用於在我的情況下作爲與Oracle服務器的連接被破壞的危急情況。

目前我已經刪除了這些軟件,現在運行穩定超過一週。