@@ -504,57 +504,64 @@ private void ProcessFile(WatchedFile file, FileStream fs)
504
504
fs . Position = file . LastPosition ;
505
505
506
506
// fill up to 64K bytes
507
- using var bytes = BytePool . Rent ( ushort . MaxValue ) ;
508
- int read = fs . Read ( bytes , 0 , ushort . MaxValue ) ;
507
+ var bytes = ArrayPool < byte > . Shared . Rent ( ushort . MaxValue ) ;
508
+ try
509
+ {
510
+ int read = fs . Read ( bytes , 0 , ushort . MaxValue ) ;
509
511
510
- // setup state
511
- int bytesEnd ;
512
- bool foundNewLine = false ;
512
+ // setup state
513
+ int bytesEnd ;
514
+ bool foundNewLine = false ;
513
515
514
- // find the last newline char
515
- for ( bytesEnd = read - 1 ; bytesEnd >= 0 ; bytesEnd -- )
516
- {
517
- if ( bytes [ bytesEnd ] == '\n ' )
516
+ // find the last newline char
517
+ for ( bytesEnd = read - 1 ; bytesEnd >= 0 ; bytesEnd -- )
518
518
{
519
- // take bytes up to and including the last newline char
520
- bytesEnd ++ ;
521
- foundNewLine = true ;
522
- break ;
519
+ if ( bytes [ bytesEnd ] == '\n ' )
520
+ {
521
+ // take bytes up to and including the last newline char
522
+ bytesEnd ++ ;
523
+ foundNewLine = true ;
524
+ break ;
525
+ }
523
526
}
524
- }
525
527
526
- // check for binary file
527
- if ( ! foundNewLine )
528
- {
529
- if ( read > maxLineLength )
528
+ // check for binary file
529
+ if ( ! foundNewLine )
530
530
{
531
- // max line length bytes without a new line
532
- file . IsBinaryFile = true ;
533
- Logger . Warn ( $ "Aborting parsing log file { file . FileName } , file may be a binary file") ;
531
+ if ( read > maxLineLength )
532
+ {
533
+ // max line length bytes without a new line
534
+ file . IsBinaryFile = true ;
535
+ Logger . Warn ( $ "Aborting parsing log file { file . FileName } , file may be a binary file") ;
536
+ }
537
+ // reset position try again on next cycle
538
+ fs . Position = file . LastPosition ;
539
+ return ;
534
540
}
535
- // reset position try again on next cycle
536
- fs . Position = file . LastPosition ;
537
- return ;
538
- }
539
541
540
- // if we found a newline, process all the text up until that newline
541
- if ( foundNewLine )
542
- {
543
- try
544
- {
545
- // strip out all carriage returns and ensure string starts/ends with newlines
546
- string foundText = encoding . GetString ( bytes , 0 , bytesEnd ) . Trim ( ) . Replace ( "\r " , string . Empty ) ;
547
- string processText = "\n " + foundText + "\n " ;
548
- OnProcessText ( processText ) ;
549
- ProcessText ? . Invoke ( processText ) ;
550
- }
551
- finally
542
+ // if we found a newline, process all the text up until that newline
543
+ if ( foundNewLine )
552
544
{
553
- // set file position for next processing
554
- fs . Position = file . LastPosition + bytesEnd ;
555
- file . LastPosition = fs . Position ;
545
+ try
546
+ {
547
+ // strip out all carriage returns and ensure string starts/ends with newlines
548
+ string foundText = encoding . GetString ( bytes , 0 , bytesEnd ) . Trim ( ) . Replace ( "\r " , string . Empty ) ;
549
+ string processText = "\n " + foundText + "\n " ;
550
+ OnProcessText ( processText ) ;
551
+ ProcessText ? . Invoke ( processText ) ;
552
+ }
553
+ finally
554
+ {
555
+ // set file position for next processing
556
+ fs . Position = file . LastPosition + bytesEnd ;
557
+ file . LastPosition = fs . Position ;
558
+ }
556
559
}
557
560
}
561
+ finally
562
+ {
563
+ ArrayPool < byte > . Shared . Return ( bytes ) ;
564
+ }
558
565
}
559
566
}
560
567
}
0 commit comments