循环读取数据库的一条记录,内存越来越大怎么办。

cs1438250 2015-12-01 01:24:10
两个进程,进程a不停的更改数据库里的一条记录。
进程b 0.5秒读取一次这条记录,达到更新显示的目的。

进程b
searchAd s = new searchAd();
private void timer2_Tick(object sender, EventArgs e)
{
DataSet dt = s.serachAdValue();
if (dt == null || dt.Rows.Count == 0)
{
MessageBox.Show("没有你所要查询的数据");
}
else
{
赋值显示
}
dt.Dispose();
}


searchAd是另写的一个有连接字符串和sql语句的类。

打开任务管理器,发现调试的进程占用内存越来越大。
...全文
239 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
j34jyj94ksigj4j 2015-12-02
  • 打赏
  • 举报
回复
引用 2 楼 cs1438250 的回复:
[quote=引用 1 楼 xian_wwq 的回复:] 应该是连接没有处理好,searchAd类才是问题所在 可以不用周期性读数据库, 数据量少的情况下可以使用触发器, 将变更数据写到文件中去 读进程读文件就可以
。但是new类实例只有一次执行啊。 想想改改构架,弄个一个进程里,多开几个线程算了。 还是多进程用共享内存快点。[/quote] DataSet dt = s.serachAdValue(); 这个是每次都实例化的,Dispose也不能保证dt被释放,另外,这种情景应考虑消息机制,而不是去轮询
lvfeng_95 2015-12-02
  • 打赏
  • 举报
回复
你把代码这样放出来,看不出来什么,只能说明你的数据库访问类写的有问题。 你这样做的话,就用dataread读取数据,他是每次从数据库读取一条数据,并且一直占用数据库连接。
  • 打赏
  • 举报
回复
用.Net Memory Profiler监控一下就可以看到了,如果代码不复杂,还是看看有什么对象是不断的New但是 没有释放的。
江南小鱼 2015-12-01
  • 打赏
  • 举报
回复
在不断的创建连接对象吧?
changjiangzhibin 2015-12-01
  • 打赏
  • 举报
回复
没有实测:感觉可能是使用后的变量、连接 没有及时清理
byronqiji 2015-12-01
  • 打赏
  • 举报
回复
感觉没有关闭数据库链接
exception92 2015-12-01
  • 打赏
  • 举报
回复
把 timer2_Tick 中的代码注释掉 ,运行看看,如果内存不增加 那就是DataSet 没有释放完全。
cs1438250 2015-12-01
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
应该是连接没有处理好,searchAd类才是问题所在 可以不用周期性读数据库, 数据量少的情况下可以使用触发器, 将变更数据写到文件中去 读进程读文件就可以
。但是new类实例只有一次执行啊。 想想改改构架,弄个一个进程里,多开几个线程算了。 还是多进程用共享内存快点。
xian_wwq 2015-12-01
  • 打赏
  • 举报
回复
应该是连接没有处理好,searchAd类才是问题所在 可以不用周期性读数据库, 数据量少的情况下可以使用触发器, 将变更数据写到文件中去 读进程读文件就可以

110,477

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧