日期:2014-05-18  浏览次数:20933 次

每隔20秒查询数据库一次,内存不断在增长
一个监控程序,C#,每隔20秒查询数据库一次,数据量不大,可内存区不断在增长。
已经在每次查询完数据库后使用,内存回收了(代码如下),但效果不明显。

if   (dbConnection   !=   null)
{
dbConnection.Close();
dbConnection   =   null;
}
if   (dbCommand   !=   null)
{
dbCommand.Dispose();
dbCommand   =   null;
}
if   (dsResult   !=   null)
{
dsResult.Clear();
dsResult.Dispose();
dsResult   =   null;
}
if   (dataAdapter   !=   null)
{
dataAdapter.Dispose();
dataAdapter   =   null;
}
GC.Collect();


------解决方案--------------------
锁的问题/
------解决方案--------------------
友情up
------解决方案--------------------
1、为数据库打上最新的补丁

2、查查病毒

3、确认程序中的资源占用确实被释放,可以查看数据库的锁信息

4、排除以上原因,则是正常现象,可以为SQL Server设置最大使用内存选项来控制。
------解决方案--------------------
非特殊情况,不要手动垃圾回收

如果需要网络连接数据库, 试一下使用web服务直接返回要检查的状态, web服务则调用数据库的存储过程

如果是本机需要20秒读一次,你可以设计为保持一个长连接
------解决方案--------------------
一个监控程序,C#,每隔20秒查询数据库一次,数据量不大,可内存区不断在增长。
已经在每次查询完数据库后使用,内存回收了(代码如下),但效果不明显。

lz可以考虑用多线程来实现:利用多线程中锁的机制,在同一时刻只允许一个线程访问数据库,并及时释放数据库连接.