Добавление текстовых файлов в один большой файл в ASP/vbscript
У нас есть старая веб-страница ASP, которая считывает несколько текстовых файлов с диска и обрабатывает их.
Конечно, он невероятно медленный и падает почти ежедневно.
В настоящее время это код:
For i = 0 To tNumberSites Set TStream = fs.OpenTextFile(SiteName) FileOpen = True Do While (TStream.AtEndOfStream <> True) tLine = TStream.readLine [removed tons of processing code here that is executed for each line of each file] LOOP
Как вы, вероятно, догадываетесь, эффективности нигде не видно, и сбои, вероятно, связаны с чрезмерным налогообложением сервера больше, чем с чем-либо еще.
Что я хотел бы сделать, так это прочитать все файлы в один большой текстовый поток и просто выполнить обработку один раз. Надеюсь, это немного ускорит процесс.
Но FileStreamObject и TextStream, похоже, не имеют собственного метода добавления для этого.
Каков будет мой лучший план нападения?
Считывание файла в поток, цикл через него и запись строк в другой поток (назовем его пока BigStream), затем чтение второго файла, цикл через него и продолжение записи в BigStream, промывание и повторение, а затем запуск обработки против BigStream, когда все файлы будут загружены?
Или есть более простой способ сделать приложение в памяти, которое я нигде не могу найти?
Примечание: Я не являюсь парнем ASP/VBScript, и здесь их больше нет. И нет, у нас нет тестовой среды, поэтому любой код, который я попробую, будет живым. (Ура! Такое удовольствие)
Что я уже пробовал:
Как я уже сказал выше, для этого нет тестовой среды/среды разработки, поэтому все мои попытки были умственными упражнениями. Единственное, что я могу придумать, - это процесс, который я описал выше, который должен работа, но я уверен в этом только на 97%.
Я надеюсь, что у кого-то есть лучшая (и, надеюсь, пуленепробиваемая) идея. Мне не нужен код. Несмотря на то, что я не принадлежу к типу VB, я могу понять, что делать, если мне достаточно намекнуть. Или псевдокод. Если только он не находится в БНФ,и в этом случае я буду пить.
njammy
Есть ли файлы в каком-то определенном формате?
GenJerDan
Текст с разделителями-каретками, например^this.
njammy
Не зная вашего набора инструментов, навыков и т. д., Я бы предложил использовать пакет DTS или пакет SSIS для загрузки данных txt-файла в таблицу базы данных, а затем запрашивать только необходимые данные для построения вывода или обработки. Гораздо более эффективная и параллельная механика.
GenJerDan
У нас просто нет людей, чтобы сделать все, что нужно, своевременно. :(
Richard Deeming
Я сомневаюсь, что объединение файлов в один гигантский файл будет иметь какое-либо существенное значение, если только ваша проблема не связана с блокировкой файлов.
Какую ошибку вы получаете, когда код выходит из строя?
GenJerDan
Я думаю, что сбой с такой же вероятностью связан с тем, что он занимает слишком много времени в сочетании с несколькими десятками подобных процессов, запущенных одновременно. Ежедневная загрузка данных, все происходящие в одно и то же время, через эту нелепую ASP/VBScript...вещь.
Мы находимся в процессе преобразования, по крайней мере, этой части в SSIS, но нас продолжают одолевать обстоятельства: слишком много пожаров и недостаточно пожарных.
Если есть реальная ошибка, она нигде не отображается, и у меня нет достаточно знаний, чтобы поместить в эти вещи какой-либо приличный отладочный код. И, конечно же, нам не разрешается устанавливать какие-либо инструменты на серверах.
Я могу сказать, в чем проблема: нет ничего плохого в текстовых файлах, которые загружаются. Запуск процесса два или три раза в конечном итоге приводит к обработке всех данных. И он даже не такой уж большой. Объединенные файлы составляют в общей сложности около 83 тысяч строк.
njammy
Посмотрите на использование logstache, который является технологией nosqldb для индексации содержимого файлов. Настройте некоторые параллельные процессы для использования индексированного источника данных и обработки данных таким образом.
GenJerDan
Я желаю. Но мы вынуждены работать с тем, что есть. Режим обслуживания, на данный момент. Это потребует новых разработок.
Richard Deeming
Если ваш код выходит из строя, не пытайтесь угадать, в чем проблема. Запишите подробности ошибки и либо опубликуйте ее здесь, либо воспользуйтесь поисковой системой, чтобы узнать, не было ли у кого-нибудь еще этой ошибки.
Заимствования из это так нить[^], если вы еще этого не сделали, создайте error500.asp
страница и настройте ее как пользовательскую страницу ошибок для 500 ошибок в IIS.<%
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim objFSO, err
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set err = Server.GetLastError()
outFile = Server.MapPath("/Log/ErrorLog.txt")
Set objFile = objFSO.OpenTextFile(outFile, ForAppending, True, TristateTrue)
objFile.WriteLine Now & " - ERROR - ASPCode:" & err.ASPCode & " ASPDescription: " & err.ASPDescription & " Category: " & err.Category & " Description: " & err.Description & " File: " & err.File & " Line: " & err.Line & " Source: " & err.Source & vbCrLf
objFile.Close
Set objFile = Nothing
Set err = Nothing
%>
GenJerDan
Спасибо. Похоже, это даст больше информации, чем неудачная трассировка запросов, которая вообще ничего не говорит.