大量数据查询导致界面卡好一会儿

flyhorse1010 2011-09-20 09:56:07
我是用C# WINFORM做的数据库查询,数据量有100000条记录,但在查询的过程中整个WINFORM界面都卡住了,等查询完毕才恢复了,我该怎样改善这种情况呀???(另外在查询优化上有什么好的建议吗?)

注:(我已经为数据库查询开启了一个线程,原以为另开一线程会好一些,但界面仍然卡住)

部分代码如下:
---------------------------
主线程代码:
if (th != null) //th为System.Threading.Thread 对象
th.Abort();
th = new System.Threading.Thread( SQLThread );
th.Start();

while (semaphore < 0) //semaphore 为我定义的全局变量,默认为-1,当SQLThread线程执行完毕semaphore将是0
{
}
semaphore = -1;
----------------------
SQLThread线程代码:
private void SQLThread()
{
dt = null; //dt为全局的DataTable 对象
dt = new DataTable();
f.db.selectsql(sql, ref dt);//f为父窗口地址,db为自定义数据库操作类对象,sql为数据库查询字符串
semaphore = 0;
}
...全文
314 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
csndsb 2011-09-20
  • 打赏
  • 举报
回复
AutoResetEvent aev = new AutoResetEvent(false);

void yourevent()
{
if (th != null) //th为System.Threading.Thread 对象
th.Abort();
th = new System.Threading.Thread( SQLThread );
th.Start();

aev.Set();
}
----------------------
nazj 2011-09-20
  • 打赏
  • 举报
回复
我记得我以前看到的做法是
DataTable先绑定到GridView上,后台开线程不断地从库里查少量数据出来,填进DataTable中,知道查出所有的数据,这样界面不会死掉
萧炎 2011-09-20
  • 打赏
  • 举报
回复
单独写一个线程来处理 这样就不会影响你操作了

garfieldzf 2011-09-20
  • 打赏
  • 举报
回复
加分页
garfieldzf 2011-09-20
  • 打赏
  • 举报
回复
SearchFriend 2011-09-20
  • 打赏
  • 举报
回复
建议,1.如果是数据需全部获取出来有用的话,那你还不如直接根据你所需的条件轮询
2.如果是做显示,建议分屏加载或者分页加载.
分屏,等滚动条到一定程度,高度自己定义,直接重新获取下数据.

一次性10万条数据,本地还是卡一小会,如果是远程- -.不想了.
flyhorse1010 2011-09-20
  • 打赏
  • 举报
回复
不好意思,请教一下,主线程异步监听semaphore值吗?可是那样会马上返回了哦[Quote=引用 2 楼 zdbb 的回复:]
是这里一直在执行卡了:
while (semaphore < 0) //semaphore 为我定义的全局变量,默认为-1,当SQLThread线程执行完毕semaphore将是0
{
}
可以使用异步调用。
[/Quote]
flyhorse1010 2011-09-20
  • 打赏
  • 举报
回复
还是没有用哦,卡好一会儿了[Quote=引用 1 楼 zk11223344 的回复:]
在while里面加上Application.DoEvents();
[/Quote]
只在此山中 2011-09-20
  • 打赏
  • 举报
回复
是这里一直在执行卡了:
while (semaphore < 0) //semaphore 为我定义的全局变量,默认为-1,当SQLThread线程执行完毕semaphore将是0
{
}
可以使用异步调用。
zk11223344 2011-09-20
  • 打赏
  • 举报
回复
在while里面加上Application.DoEvents();

110,529

社区成员

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

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

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