2016年5月25日水曜日

PowerShellメモ(高速化、参照型変数)

関数を使って、文字列をどんどん連結していったり、ArrayListに値を追加していったり、ということを繰り返して、サイズが大きくなってくると、動作が遅くなってくる。
引数として渡す、戻り値として渡すときに、コピーが行われるからだ。
こういう場合は、参照型変数を使う。

function addArray {
  param( $fileName, [ref]$arrayRef)
  #参照型変数(引数)のValueで使う
  $array = $arrayRef.Value
  $content = Get-Content $fileName

  foreach( $line in $content) {
    if( $line.StartWith( "username")) {
      $array.add( $line)
    }
  }
}
$logArray = New-Object -TypeName ArrayList
$files = Get-ChildItem -Filter *.log
foreach( $oneFile in $files) {
  #参照型として渡すには頭に[ref]をつけて()で囲む
  addArray( $oneFile, ([ref]$logArray))
}

0 件のコメント:

コメントを投稿