2015-10-28 3 views
0
'Check if the file has any broken records 
     Dim reader As StreamReader = New StreamReader(fileDirectory) 
     Dim fileLine As String 
     Dim stopCheck As Boolean = False 

     Do While reader.Peek() > -1 
      fileLine = reader.ReadLine() 

      'If the line is not start with eCW| then it is a broken record 
      If Not fileLine.StartsWith("eCW|") Then 
       stopCheck = True 
       Exit Do 
      End If 
     Loop 

     reader.Close() 

     If stopCheck Then 

Это займет очень много времени, чтобы проверить строки, когда текстовый файл имеет много записей.Сокращение времени выполнения

ex. Файл 1 имеет 500 000 завершенных записей. Он будет перемещаться по всем строкам, пока не закроет программу.

В файле 2 есть сломанные записи в конце текстового файла. Ему придется перебирать все строки до того, как найдет сломанную запись.

Есть ли способ ускорить этот процесс проверки?

+0

Этот метод уже очень быстр (вы измеряли требования времени в условиях, которые вы предлагаете?). Проблема с более быстрыми методами заключается в том, что им нужен весь файл для загрузки в память, что невозможно при слишком больших файлах. С другой стороны, при работе с таким количеством записей, полагаясь на файлы, нет лучшего подхода (базы данных точно предназначены для таких ситуаций). Наконец, имейте в виду, что вы должны распоряжаться переменной «StreamReader», чтобы избежать проблем (например, блокировка файлов); вы можете легко позаботиться об этом с помощью инструкции 'Using'. – varocarbas

ответ

1

Устранение использования переменной fileLine устранит распределение памяти на каждой итерации.

Do While reader.Peek() > -1 
     'If the line is not start with eCW| then it is a broken record 
     If Not reader.ReadLine().StartsWith("eCW|") Then 
      stopCheck = True 
      Exit Do 
     End If 
    Loop 

Поскольку строки неизменяемы, распределение памяти происходит каждый раз при изменении строки. Link Кроме этого, я думаю, что ваш подход велик - как только вы добавите заявление Using.

1

Просто окрыления его здесь, но ...

try 
     while not reader.readline().startswith("eCWL") 
     end while 
     stopCheck = true 
    catch 
     stopCheck = false 
    end try 

Я предполагаю, что отлов исключения для чтения, когда вы пытаетесь читать дальше ВФ будет стоить не нуждаясь делать украдкой и чтения для каждого запись