0

我似乎有内存泄漏。我在 stackoverflow 上发现了一篇推荐“使用”方法的帖子,但这似乎并不能解决问题。

我正在使用 Red Gate 内存分析器,它显示非托管内存不断增加。

这是我用来测试的简单应用程序:

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()
    {
    }
}
}

有人知道如何解决这个问题吗?谢谢。

4

1 回答 1

0

OdbcConnection.ReleaseObjectPool();是这个原因。我遇到了一些严重的问题,不断增加的句柄和内存泄漏导致 DEP 关闭了我的软件。在 SQLClient 中的类比中可以观察到相同的问题,甚至在使用此语句之前关闭或处理连接也无济于事。

在我OdbcConnection.ReleaseObjectPool();的情况下,我只在关键情况下使用它,因为与 Oracle 服务器的连接被破坏。

目前我已经删除了这些,并且该软件已经稳定运行了一个多星期。

于 2014-07-01T14:01:11.980 回答