多线程/任务产生最小的差异,如何加快进程

时间:2015-03-10 16:07:28

标签: vb.net multithreading task

我觉得我在这里做错了什么并且不确定是什么,因为我没有注意到多线程方面的重大差异。

我有一个' Convert_Data'执行大量数据处理的函数。我用1 Task测试了它,看到它能够在8秒内完成。当试图将工作分成4个任务时,整体减少仅为2秒。我期待它至少减少一半的处理?

t1 = Task.Factory.StartNew(Sub() Convert_Data(Filter, 0, CInt(GridView1.RowCount / 4)))
t2 = Task.Factory.StartNew(Sub() Convert_Data(Filter, CInt(GridView1.RowCount / 4) + 1, CInt(GridView1.RowCount / 2)))
t3 = Task.Factory.StartNew(Sub() Convert_Data(Filter, CInt(GridView1.RowCount / 2) + 1, CInt(GridView1.RowCount / 3)))
t4 = Task.Factory.StartNew(Sub() Convert_Data(Filter, CInt(GridView1.RowCount / 3) + 1, GridView1.RowCount))

我根据gridview中的行数分解任务。因此,每个任务都要处理四分之一的文件。我对任务很新,不确定我做错了什么。有什么意见/建议吗?

我注意到任务4需要更长的时间来完成而不是其他任务。

Conver_Data子(Filter,StarRow,End Row) 所以,如果有100个文件;

任务1将从0 - 25

任务2将从26 - 50

开始

任务3将从51 - 75&

开始

任务4将从76 - 100

开始

1 个答案:

答案 0 :(得分:2)

不应该将代码读成类似......

t1 = Task.Factory.StartNew(Sub() Convert_Data(Filter, 0, CInt    (GridView1.RowCount / 4)))
t2 = Task.Factory.StartNew(Sub() Convert_Data(Filter, CInt(GridView1.RowCount / 4) + 1, CInt(GridView1.RowCount / 2)))
t3 = Task.Factory.StartNew(Sub() Convert_Data(Filter, CInt(GridView1.RowCount / 2) + 1, CInt(3 * GridView1.RowCount / 4)))
t4 = Task.Factory.StartNew(Sub() Convert_Data(Filter, CInt(3 * GridView1.RowCount / 4) + 1, GridView1.RowCount))

根据情况,你的第一项任务似乎是工作的1/4,第二项是另外四分之一,第三项是1/6,也是工作的最后2/3。