我已经设置了一个应用程序来解析每天大约3000个文件,每个文件包含大约4000-5000个xml格式的文章,其中有100个字段。 它涉及很多清理和解析,但平均而言,每个帖子大约需要6秒。现在我尝试了线程化,但是因为我已经设置了所有变量被覆盖等的设置......我将这些文件分成了不同的文件夹,并且创建了程序的副本以运行并访问分配的文件夹。它运行在具有16 G内存的Windows 2008服务器上,我被告知需要重新编程才能加速进程并且不会占用太多内存。 有没有人有任何建议,或者我设置的这个过程似乎很好?我是新人,每个人都认为我是白痴。加快处理速度的程序逻辑
For i As Integer = 0 To fileLists.Count - 1
Do
Try
If Not completeList.Contains(fileLists(i).ToString) AndAlso fileLists(i).EndsWith("xml") Then
If fileLists(i).Contains("Fa") Then
inputFile = New StreamReader(fileLists(i))
data = String.Empty
infile = fileLists(i).ToString
swriter.WriteLine(infile.ToString)
swriter.Flush()
Dim objFileInfo As New FileInfo(fileLists(i))
fileDate = objFileInfo.CreationTime
Dim length As Integer = objFileInfo.Length
data = inputFile.ReadToEnd
If Not data Is Nothing Then
parsingTools.xmlLoad(data)
tempList.Add(fileLists(i))
completeList.Add(fileLists(i))
End If
inputFile.DiscardBufferedData()
End If
End If
End If
好吧我不知道要发布什么代码,因为字面上有很多代码。以上是主要模块,它读取数据时尝试将其加载到xml文档中,如果失败,则使用普通文本解析来解析数据。它导航到我需要提取的每个字段,并连接到几个Web服务以获取更多内容,然后将所有内容添加到一起以创建新的xml文件。
manager.AddNamespace("x", "http://www.w3.org/2005/Atom")
manager.AddNamespace("a", "http://activitystrea.ms/spec/1.0/")
Dim nodecount As Integer = xmlParser.getNodesCount(navigator, "x:entry", manager)
For i As Integer = 1 To nodecount
statid = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/x:id", manager)
contentDate = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/x:published", manager)
template = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/x:title", manager)
title = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/x:source/x:title", manager)
ctext = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/x:summary", manager)
htext = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/a:object/x:content", manager)
author = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/x:author/x:name", manager)
authorUri = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/x:author/x:uri", manager)
avatarUrl = xmlParser.XPathFind(navigator, "x:entry[" & i & "]/a:author/x:link[@rel='avatar']/@href", manager)
Next
并行处理将需要*更多*内存在这样的任务上,而不是更少。请张贴一些代码。 – 2011-03-25 18:51:33
有没有我应该考虑的选择? – vbNewbie 2011-03-25 19:05:02
有人知道Visual Basic应该能够帮助你。 (我甚至不知道你的工作语言是什么,直到你发布代码为止。) – 2011-03-25 19:10:02