当前位置:  开发笔记 > 编程语言 > 正文

c#am我正确处理多个线程

如何解决《c#am我正确处理多个线程》经验,为你挑选了1个好方法。

我有一个winform应用程序,它创建了5个线程来连接并在非常慢的连接上从数据库中检索信息(对于某些查询来说是90秒).每个线程都有自己的类实例来执行sql查询.当检索到查询的数据时,主线程将由运行查询的类触发的事件通知.在接收到事件之后,主线程的各种组件被更新,例如显示项目或仅仅是数据表保存数据以供以后使用.根据查询的信息类型,以不同的间隔重复查询.

一切都很好......但我不开心.我觉得它应该以不同的方式完成,但我不确定哪种方式.

以下是我目前如何设置每个线程:

string ConnectionString = @"Data Source=mySrv;Initial Catalog=myTbl;Connect Timeout=30;UID=sa;pwd=mypwd";


//thread #1    
 SQL_Requests ReasonRequests;
 Thread Reason_Thread;
 ReasonRequests = new SQL_Requests();
 ReasonRequests.ProcessFinished += new SQL_Requests.ProcessFinished(ReasonRequests_Completed);
 Reason_Thread = new Thread(ReasonRequests.ExecuteQuery);
 ReasonRequests.DBQueryString = "select * from ReasonTable where staralingment = goodalignment"
 ReasonRequests.DBConnection = ConnectionString;

//thread #2
SQL_Requests EventRequests; 
Thread Event_Thread;
EventRequests = new SQL_Requests();
EventRequests.ProcessFinished += new SQL_Requests.ProcessFinished(EventRequests_Completed);
Event_Thread= new Thread(EventRequests.ExecuteQuery);

EventRequests.DBQueryString = "select * from EventTable where somefield = somevalue"
EventRequests.DBConnection = ConnectionString;

每个Thread.start都有不同的间隔.

任何建议?



1> Darryl Braat..:

您应该看一下执行查询的异步方法,而不是自己开发线程,例如http://msdn.microsoft.com/en-ca/library/system.data.sqlclient.sqlcommand.beginexecutereader.aspx

您提到您的连接速度很慢,是低带宽连接还是高延迟连接?如果由于带宽不足而导致数据缓慢返回多个查询会使事情变慢.如果只是一个延迟问题,一次执行多个查询可能会提高响应能力.

如果您正在执行一组相关查询,您可能还需要考虑将它们分组到单个命令中,或者使用存储过程将它们分组到服务器上.您可以使用SqlDataReader上的NextResult方法获取其他结果集.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有