多线程处理问题

时间:2011-03-18 03:29:34

标签: vb.net

我刚刚在VB.net中学到了一些基于多线程的基础知识,因为我遇到了处理大量记录并逐个插入SQL数据库的过程。 我的代码看起来像这样:

  Private Sub btnLoadNow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoadNow.Click

    Dim autoLoad1 As New Thread(AddressOf AutoLoad)
    autoLoad1.Start()

    Dim autoLoad2 As New Thread(AddressOf AutoLoad)
    autoLoad2.Start()

    Dim autoLoad3 As New Thread(AddressOf AutoLoad)
    autoLoad3.Start()

    Dim autoLoad4 As New Thread(AddressOf AutoLoad)
    autoLoad4.Start()

    Dim autoLoad5 As New Thread(AddressOf AutoLoad)
    autoLoad5.Start()


    Dim autoLoad6 As New Thread(AddressOf AutoLoad)
    autoLoad6.Start()

    Dim autoLoad7 As New Thread(AddressOf AutoLoad)
    autoLoad7.Start()

    Dim autoLoad8 As New Thread(AddressOf AutoLoad)
    autoLoad8.Start()

    Dim autoLoad9 As New Thread(AddressOf AutoLoad)
    autoLoad9.Start()

End Sub

Private Sub AutoLoad()

for each Item as Record In ItemLists
   Process Codes
Next

End Sub

项目列表是我从数据库中检索到的全局列表,一切看起来都不错,但是当我运行这个程序时,我发现线程将一条记录插入数据库9次(我总共有9个线程),这使得我想也许我需要专门为每个线程分配1/9的列表?有没有其他方法可以做到这一点,不需要拆分列表,如果没有,我如何拆分然后分配?欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

我不会为每个插件创建一个线程,因为创建线程的开销超过了首先旋转它所带来的好处。但是,您可以使用共享变量并使用SyncLock来维护并发。

编辑评论问题:

'Replace List(Of String) with your type.
Public Shared ItemList As New List(Of String)

这通常用于争用内存的更新。您的第一个线程最终会在您的示例中执行所有处理。如果您真的想要旋转几个线程并拆分工作,请为每个线程分配一个名称,然后让您的过程保持逻辑,为每个线程分配不同的工作。