【发布时间】:2013-09-30 09:20:17
【问题描述】:
我似乎有内存泄漏。我在 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()
{
}
}
}
有人知道如何解决这个问题吗? 谢谢。
【问题讨论】:
-
我正在使用 Paradox 数据库驱动程序。
-
您是否尝试将
OdbcConnection.ReleaseObjectPool();放在using块内? -
这个想法是odbcconnection对象只存在于using语句期间,因此将releaseobjectpool放置在确保对象已被释放并因此关闭,准备释放。
-
我正在尝试您现在的建议,也许会有所作为。我会告诉你的。
-
你是对的。我猜想在 using 中包含 ReleaseObjectPool 需要在它之前显式关闭,这会很奇怪。一点头绪都没有也许这会有所帮助,因为悖论驱动程序和 FM 的一样写得很好stackoverflow.com/q/13513224/1236044
标签: c# memory-leaks odbc paradox