title: Is [CallerMemberName] slow compared to alternatives when implementing INotifyPropertyChanged?
body: <p>There are good articles that suggest <a href="http://blog.amusedia.com/2013/06/inotifypropertychanged-implementation.html" rel="noreferrer">different ways for implementing <code>INotifyPropertyChanged</code></a>.</p>
  
  <p>Consider the following basic implementation:</p>
  
  <pre><code>class BasicClass : INotifyPropertyChanged
  {
      public event PropertyChangedEventHandler PropertyChanged;
  
      private void FirePropertyChanged(string propertyName)
      {
          var handler = PropertyChanged;
          if (handler != null)
              handler(this, new PropertyChangedEventArgs(propertyName));
      }
  
      private int sampleIntField;
  
      public int SampleIntProperty
      {
          get { return sampleIntField; }
          set
          {
              if (value != sampleIntField)
              {
                  sampleIntField = value;
                  FirePropertyChanged("SampleIntProperty"); // ouch ! magic string here
              }
          }
      }
  }
  </code></pre>
  
  <p>I'd like to replace it with this one:</p>
  
  <pre><code>using System.Runtime.CompilerServices;
  
  class BetterClass : INotifyPropertyChanged
  {
      public event PropertyChangedEventHandler PropertyChanged;
      // Check the attribute in the following line :
      private void FirePropertyChanged([CallerMemberName] string propertyName = null)
      {
          var handler = PropertyChanged;
          if (handler != null)
              handler(this, new PropertyChangedEventArgs(propertyName));
      }
  
      private int sampleIntField;
  
      public int SampleIntProperty
      {
          get { return sampleIntField; }
          set
          {
              if (value != sampleIntField)
              {
                  sampleIntField = value;
                  // no "magic string" in the following line :
                  FirePropertyChanged();
              }
          }
      }
  }
  </code></pre>
  
  <p>But sometimes I read that the <code>[CallerMemberName]</code> attribute has poor performances compared to alternatives. Is that true and why? Does it use reflection?</p>