分析下 怎么弄.
我现在有两个方法,
方法一:读数据,
public string[] SetData(string s,int s2)
{
}
方法二:分析数据.并显示.
public string[] GetData(string s)
{
}
由于数据量大,如果单线程运行,肯定需要大量时间.所以想一边读数据,一边分析数据,最后显示.
怎么用多线程去写呢,红自部分是我比较不能理解的,因为分析的数据是方法一读出来的数据,需要一条一条处理,怎么传才能保证多线程处理.
------解决方案--------------------不会多线程啊
------解决方案--------------------不太清楚你的需求,如果想用多线程的方式,基本思路是:
创建一个保存结果的缓冲区,读取和分析数据的作业是一个线程,往缓冲区中写数据,显示数据的作业是另一个线程,循环检测缓冲区中的数据并发送显示。
需要注意的地方是多线程操作的对象要注意加锁。
------解决方案--------------------在这儿也不好说???
就是用多线程
------解决方案--------------------是要对SetData方法读出的每个string进行GetData?
------解决方案--------------------找个ArrayList做中间交换区
一个线程放数据到列表中.另一线程读出来再进行操作,同时要lock一下
线程这个太复习拉搞不好反而会令程序越搞越麻烦
------解决方案--------------------呵呵 这个很简单 用WHILE循环读取,每次读取出来打入泛型集合中(你自定义的)
然后开启多线程每次取出队列首位,移除,然后自己加工去,然后显示即可
------解决方案--------------------效率不高,在这个多线程中需要进行同步,否则分析会出错的。现在的MS OS也没有为多线程提供合格的平台
------解决方案--------------------别搞得那么复杂,说起来就吓唬人
2线程足够,在原有线程上加1个读取的,
做一个事件,读出 100条,1000条 ,触发一个事件 调用输出方法
简单,易行
------解决方案--------------------
不了解你定义的 string[] 返回值干什么用的,有什么逻辑联系。
程序结构类似于:
C# code
public string[] SetData(string s, int s2)
{
//todo: 读取数据
ThreadPool.QueueUserWorkItem(new WaitCallback(DoGetData), s);
}
public string[] GetData(string s)
{
}
private void DoGetData(object s)
{
string[] result = GetData((string)s);
//todo:显示Result
}
public void Main()
{
while (!是否结束主线程())
{
//todo: 使用两个参数调用 SetData();
Thread.Sleep(1); //1,或者你认为合适的值。
}
}
private bool 是否结束主线程()
{
throw new NotImplementedException();