使用Parallel.ForEach

时间:2013-02-14 20:41:04

标签: xml vb.net parallel-processing

我正在尝试优化我创建的备份程序。代码很草率,因为它是我的第一个如此规模的程序,但希望你可以看看它。

这个程序运行正常,但似乎需要的时间比需要的时间长。所以我正在使用Parallel.ForEach来帮助优化压缩过程。

现在,我让程序以下列方式执行压缩任务

Dim Destin = JobNode.SelectNodes("Destination")

For Each item As System.Xml.XmlNode In Destin
    Dim time As DateTime = DateTime.Now
    Dim format As String = "MMMddyyyy"
    Dim zpath As String = item.InnerText
    'replaces [date] in destination with actual Date 
    If time.DayOfWeek = 1 Then
        time = time.AddDays(-1)
        item.InnerText = Replace(item.InnerText, "[date]", time.ToString(format) & "_WE")
        zpath = item.InnerText
        zip.ParallelDeflateThreshold = -1
        zip.Save(zpath)
    Else
        Dim time1 As DateTime = DateTime.Now.AddDays(-1)
        item.InnerText = Replace(item.InnerText, "[date]", time1.ToString(format))
        zpath = item.InnerText
        zip.ParallelDeflateThreshold = -1
        zip.Save(zpath)
    End If
Next

我将所有源位置和目标位置保存到xml文件中以供阅读。每个循环的这个工作正是我想要的。但是,我无法将每个循环转换为Parallel.ForEach循环。

任何帮助都会很好。再说一次,在编程方面,我仍然是绿色的,所以对我来说是愚蠢的。

是的...我已经浏览了互联网寻求帮助,但它要么让我困惑,要么在我的环境中不起作用,要么我无法使用我的代码。

1 个答案:

答案 0 :(得分:0)

试试这个:

  Dim Destin = JobNode.SelectNodes("Destination").OfType(Of XmlNode)

    Dim format As String = "MMMddyyyy"
    Parallel.ForEach(Destin, 
      Sub(item)
        Dim time As DateTime = DateTime.Now.AddDays(-1)
        Dim zpath As String = item.InnerText
        'replaces [date] in destination with actual Date 
        Dim timeString = If(time.DayOfWeek = 1, time.ToString(format) & "_WE", time.ToString(format))
        item.InnerText = Replace(item.InnerText, "[date]", timeString)
        zpath = item.InnerText
        zip.ParallelDeflateThreshold = -1
        zip.Save(zpath)
       End Sub)
相关问题