GenJerDan Ответов: 0

Добавление текстовых файлов в один большой файл в 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

Спасибо. Похоже, это даст больше информации, чем неудачная трассировка запросов, которая вообще ничего не говорит.

0 Ответов