我觉得我在这里做错了什么并且不确定是什么,因为我没有注意到多线程方面的重大差异。
我有一个' 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
开始答案 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。