Я настроил приложение для анализа около 3000 файлов в день, каждый из которых содержит около 4000-5000 сообщений в формате xml с примерно 100 полями.
Это требует много очистки и разбора, но в среднем это занимает около 6 секунд на пост. Теперь я попытался создать многопоточность, но из-за того, что у меня все настроено с перезаписью переменных и т. Д. Я разделил файлы на разные папки и просто создал копии программы для запуска и доступа к назначенной папке. Он работает на сервере Windows 2008 с 16 ГБ памяти, и мне сказали, что мне нужно перепрограммировать, чтобы ускорить процесс, а также не использовать слишком много памяти.
У кого-нибудь есть какие-либо предложения или этот процесс, который я настроил, кажется нормальным? Я новый парень, и буквально все думают, что я идиот.
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-документ, а в случае неудачи он анализирует его с помощью обычного анализа текста. Он переходит к каждому полю, которое мне нужно извлечь, а также подключается к паре веб-сервисов, чтобы получить больше контента, прежде чем все это будет добавлено вместе для создания нового 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