Where-Object와 -Filter의 속도 차이


특정한 속성 값만 알고 싶을 때 필터링하여 작업을 한다. 그런데 Filtering을 할 때 2가지 방법이 있다.

1) All kinds of cmdlets | Where-Object

2) A specific cmdlets -Filter

혹시 둘 다 지원되는 cmdlet라면 어떤 것을 사용하면 좋을까?
-Filter라는 매개변수(Parameter)를 사용하면 처리 성능이 좋고 부하가 적게 걸린다.
그 이유는 Where-Object는 앞의 결과의 모든 것을 가지고 와서 Filter을 하기 때문에 불필요한 정보까지를 포함하여 filtering을 한다. 그렇지만 -Filter는 필요한 속성 값을 가지고만 filtering을 하기 때문에 속도가 빠르다. 즉, Where-Object는 앞의 cmdlet의 결과를 가지고 2차적으로 작업을 하는 것이고 -filter는 2차적으로 처리하는 것이 아니고 그냥 처음부터 filtering을 하는 것이기 때문이다.

다음을 테스트를 하여 TotalSeconds 항목을 서로 비교해본다.

Measure-Command {gwmi win32_service -Filter “state <> ‘stopped'”}

Measure-Command {gwmi win32_service | where-Object {$_.state -ne “stopped”}}

어떤 것이 처리 시간이 적게 걸렸는가?

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s