C#多线程对大量数据的处理

liaoyukun111 2009-10-13 10:58:02
要求就是:耗时操作用线程 提高应用程序响应
就是一个方法整个执行大概要30秒,数据量增加时会更长,现在想用多线程来处理,好像有人说是什么10W条数据分成10,让10线程搞,时间在理论上执行时间小了10倍(反正就是快多了).求对应的小例子
...全文
2219 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
Face168 2011-07-28
  • 打赏
  • 举报
回复
正需要
Jason-Jin 2010-12-13
  • 打赏
  • 举报
回复
最后解决了吗?如何实现,现在根你的需求一样,能否发份代码?jin_jiaxing@hotmail.com
zzxap 2009-10-20
  • 打赏
  • 举报
回复
http://download.csdn.net/down/587275/xzherryjerry
ljh6680374 2009-10-20
  • 打赏
  • 举报
回复
可怜的孩子。
guyehanxinlei 2009-10-20
  • 打赏
  • 举报
回复
UP
liaoyukun111 2009-10-20
  • 打赏
  • 举报
回复
痛心结帖
liaoyukun111 2009-10-20
  • 打赏
  • 举报
回复
谢谢提供下载,我要先看下
liaoyukun111 2009-10-15
  • 打赏
  • 举报
回复
yuxuanji 这个好像还可以,先看下
liaoyukun111 2009-10-15
  • 打赏
  • 举报
回复
我再顶
24K純帥 2009-10-14
  • 打赏
  • 举报
回复
up..
CosmoKey 2009-10-14
  • 打赏
  • 举报
回复
帮楼主顶下。期待高手来解决
随风落梦 2009-10-14
  • 打赏
  • 举报
回复
过来看看,帮楼主顶下。期待高手来解决
liaoyukun111 2009-10-14
  • 打赏
  • 举报
回复
谢谢LS支持,不过水平有限,不难VB
cszg_zjy 2009-10-14
  • 打赏
  • 举报
回复
学习一下,帮顶
LutzMark 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 liaoyukun111 的回复:]
要求就是:耗时操作用线程 提高应用程序响应
就是一个方法整个执行大概要30秒,数据量增加时会更长,现在想用多线程来处理,好像有人说是什么10W条数据分成10,让10线程搞,时间在理论上执行时间小了10倍(反正就是快多了).求对应的小例子
[/Quote]

单纯为了不阻塞UI线程的话用异步委托或BackgroundWorker比较合适

举个耗时计算的异步委托例子

sing System;
using System.Threading;

// 定义异步调用方法的委托
// 它的签名必须与要异步调用的方法一致
public delegate int AsynComputeCaller(ulong l, out ulong factorial);

public class Factorial
{
// 计算阶乘
public ulong Compute(ulong l)
{
// 模拟耗时的计算
Thread.Sleep(50);
if (l == 1)
{
return 1;
}
else
{
return l * Compute(l - 1);
}
}

// 要异步调用的方法
// 1. 调用Factorial方法来计算阶乘,并用out参数返回
// 2. 统计计算阶乘所用的时间,并返回该值
public int AsynCompute(ulong l, out ulong factorial)
{
Console.WriteLine("开始异步方法");

DateTime startTime = DateTime.Now;
factorial = Compute(l);
TimeSpan usedTime = new TimeSpan(DateTime.Now.Ticks - startTime.Ticks);

Console.WriteLine("结束异步方法");

return usedTime.Milliseconds;
}
}

public class Test
{
public static void Main()
{
// 创建包含异步方法的类的实例
Factorial fact = new Factorial();

// 创建异步委托
AsynComputeCaller caller = new AsynComputeCaller(fact.AsynCompute);

// 启动异步调用
Console.WriteLine("启动异步调用");
ulong l = 30;
ulong lf;
IAsyncResult result = caller.BeginInvoke(l, out lf, null, null);

// 主线程进行一些操作
Thread.Sleep(0);
Console.WriteLine("主线程进行一些操作");

// 等待WaitHandle接收到信号
Console.WriteLine("等待WaitHandle接收到信号");

result.AsyncWaitHandle.WaitOne();//阻止主线程,直到EnInvoke执行完毕!

// 主线程进行一些操作
Thread.Sleep(0);
Console.WriteLine("异步方法已经结束,主线程进行另外一些操作");

// 调用EndInvoke来获得结果
int returnValue = caller.EndInvoke(out lf, result);


// 异步调用的方法已经结束,显示结果
Console.WriteLine("已经得到结果:{0}的阶乘为{1},计算时间为{2}毫秒", l, lf, returnValue);
Console.Read();
}
}

sz_xd 2009-10-14
  • 打赏
  • 举报
回复
實用,幫頂!
nate_liu 2009-10-14
  • 打赏
  • 举报
回复
我覺得可以使用回調(Callback)來實現,讓數據獲取的時候,你可以繼續做其它的操作,比如說移動窗體啊,等,不至於讓用戶感覺掛掉的樣子。你的需求不也是"要求就是:耗时操作用线程 提高应用程序响应
"嗎?
shikyoh600 2009-10-14
  • 打赏
  • 举报
回复
呵呵,我这有个,我最近刚好也在做多线程数据处理
liaoyukun111 2009-10-14
  • 打赏
  • 举报
回复
怎么就没有人回答了,我觉得很反常
liuyh208 2009-10-13
  • 打赏
  • 举报
回复
1,将要添加的数据,分组,
2,每一组用一个线程,执行添加操作
根据 1 楼的例子改改,应该差不多
加载更多回复(11)

110,536

社区成员

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

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

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