Measure-Commands (match or contains)

Welcome Forums General PowerShell Q&A Measure-Commands (match or contains)

This topic contains 7 replies, has 2 voices, and was last updated by

 
Participant
1 year, 10 months ago.

  • Author
    Posts
  • #62961

    Participant
    Points: 0
    Rank: Member

    Hey Folks,

    I stuck a bit with measuring. After watching a video, how to build advanced PowerShell-Functions I wanted to know, what is faster: $String -match '^C:\\' or $String -contains 'C:\*'. After I measured this, the solution is, that -match is 1ms faster.. but when I do for example a forloop in it, the -contains method is faster about 27ms. I have no glue why, any ideas?

    $path = "C:\Windows"
    
    
    
    Measure-Command{
        if($path -match '^C:\\'){
            for($X=1; $X -lt 500; $X++){
                Write-Output "Contains"
            }
        }
    }#faster 1x
    
    Measure-Command{
        if($path -contains "C:\"){
            for($X=1; $X -lt 500; $X++){
                Write-Output "Contains"
            }
        }
    }#faster 500x
    
    

    BR,
    BBC

  • #62964

    Participant
    Points: 246
    Helping Hand
    Rank: Participant

    Actually it does not make sense to compare them because they do different things. "-Contains" checks if a specific item is in a collection and "-match" tries to find a pattern in a string.

  • #62967

    Participant
    Points: 0
    Rank: Member

    Ohh okay, I didn't see that!
    Thank you. I will try it with -like 🙂

    Edit:

    $path = "C:\Windows"
    
    
    
    Measure-Command{
        if($path -match '^C:\\'){
            for($X=1; $X -lt 500; $X++){
                Write-Output "Contains"
            }
        }
    }#faster 1x
    
    Measure-Command{
        if($path -like "C:\*"){
            for($X=1; $X -lt 500; $X++){
                Write-Output "Contains"
            }
        }
    }#faster 500x

    Okay, like is faster about 2ms (1 times).
    Now is the question, why?

    BR,
    BBC

    • #62970

      Participant
      Points: 246
      Helping Hand
      Rank: Participant

      Because they don't do the same under the hood. Even if it seems to produce similar results.

      Those kind of comparisons are useless if you don't have a particular use case. Of course some commands run faster than others because they do different things.

    • #62973

      Participant
      Points: 246
      Helping Hand
      Rank: Participant

      BTW: If you're interested – there is a German Powershell Forum. Sometimes it is easier to explain or even to ask in your native/first language. 😉

      https://social.technet.microsoft.com/Forums/de-de/home?forum=powershell_de

    • #62974

      Participant
      Points: 0
      Rank: Member

      Thank you a lot for the explanation.
      I try to improve my skills, with PowerShell and also in English writing.

      Is there a way to have a look under the hood for a method or a command?
      Because I want to optimize the code, by knowing what command/methods will perform in the background and not measure everything.

      How do you detected where I am from?

      BR,
      BBC

    • #62980

      Participant
      Points: 246
      Helping Hand
      Rank: Participant

      I try to improve my skills, with PowerShell and also in English writing.

      Great. Both thumbs up. 😉

      Is there a way to have a look under the hood for a method or a command?

      Hmmm ... yes and no. As far as I know there is no easy way but you could do reverse engeneering if you really want to.

      Because I want to optimize the code, by knowing what command/methods will perform in the background and not measure everything.

      Powershell improved a lot over the last years, but it is still scripting technology. Most of the time performance does not matter that much. If it matters – measure it. 😉 Pretty often you can use .net code to speed up some tasks but I think most of the time it is enough to go with consistent Powershell cmdlets. That's more reliable and maintainable.

      How do you detected where I am from?

      You told me. 😉 You posted a link to your blog in your profile.

    • #62982

      Participant
      Points: 0
      Rank: Member

      ohh, sometimes I am a little bit blind. yeah.

      Okay, earlier before I just wrote C# code.
      So I started with PowerShell mid/end of the last year.

      But I practice each day, with administrativ scenarios. I saved some money yet 🙂

      I think with the time-spent-balance in mind it is better to reach the perfect solution with measuring instead of reverse engineering every command.

      Cheers and thank you 😀

      Have a nice day.

      BR,
      BBC

The topic ‘Measure-Commands (match or contains)’ is closed to new replies.