一个监控程序,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();

解决方案 »

  1.   

    1、为数据库打上最新的补丁2、查查病毒3、确认程序中的资源占用确实被释放,可以查看数据库的锁信息4、排除以上原因,则是正常现象,可以为SQL Server设置最大使用内存选项来控制。
      

  2.   

    非特殊情况,不要手动垃圾回收如果需要网络连接数据库, 试一下使用web服务直接返回要检查的状态, web服务则调用数据库的存储过程如果是本机需要20秒读一次,你可以设计为保持一个长连接
      

  3.   

    一个监控程序,C#,每隔20秒查询数据库一次,数据量不大,可内存区不断在增长。
    已经在每次查询完数据库后使用,内存回收了(代码如下),但效果不明显。lz可以考虑用多线程来实现:利用多线程中锁的机制,在同一时刻只允许一个线程访问数据库,并及时释放数据库连接.