【发布时间】:2011-11-06 06:17:36
【问题描述】:
我有 5000 条记录的数据集。 我正在以下 2 个函数中阅读它们并写入 excel。
FillDataRows1(worksheet)
FillDataRows2(worksheet)
private sub FillDataRow1(byval ws as worksheet)
Dim rowpointer As Integer = 0
While rowpointer <= dsCostUsage.Tables(0).Rows.Count - 1
While colpointer <= dsCostUsage.Tables(0).Columns.Count - 1
str = dsCostUsage.Tables(0).Rows(rowpointer)(colpointer).ToString()
DirectCast(ws.Cells(row, column), Range).Value2 = item
colpointer += 1
End While
End While
End sub
private sub FillDataRow2(byval ws as worksheet)
Dim rowpointer As Integer = 1001
While rowpointer <= dsCostUsage.Tables(0).Rows.Count - 1
While colpointer <= dsCostUsage.Tables(0).Columns.Count - 1
str = dsCostUsage.Tables(0).Rows(rowpointer)(colpointer).ToString()
DirectCast(ws.Cells(row, column), Range).Value2 = item
colpointer += 1
End While
End While
End sub
我在第一个函数中读取 1000 条记录,并在第二个函数中保留。
问题是完成此过程至少需要 4 分钟。
所以,我决定使用 THREADING 作为
Dim t As New Thread(AddressOf FillDataRows1)
Dim t1 As New Thread(AddressOf FillDataRows2)
t.Start(worksheet)
t1.Start(worksheet)
t.Join()
t1.Join()
当我创建线程时,它也需要同样的时间。
我在创建线程时做错了什么吗? 有没有其他方法可以提高性能。
【问题讨论】:
-
请注意你的格式 - 如果你的“工作表”很慢并且不能并行执行(我想就是这样),那么你会慢一点
-
线程并不总是让事情变得更快 - 通常只是为了让您在完成任务时还可以做其他事情......
-
@Tim : 有没有办法让它快点,我想在一分钟内填完excel。
-
什么是“excelLib”?它是否有任何选项可以在一个块中传输项目而不是单独传输?也许还可以考虑创建一些局部变量来缓存查找,例如 dsCostUsage.Tables(0).Columns.Count 而不是一遍又一遍地获取值。
-
@Tim 更改了 excelLib 行