New Version of PerfView available at the download center

This is a quick announcement that I have refreshed the version of PerfView at the PerfView Download Center.

There was a last minute typo on my part, and the web site says it is version 1.7, but it really version 1.6 (PerfView’s about box is the correct version).    The error was not worth correcting.

The main reason for the refresh was to fix a blocking bug (IndexOutOfRange Exception) that intermittently happens when collect a .NET Memory heap dumps.   

This refresh however also has many ‘under the hood’ changes (e.g. cleaning up TraceEvent for publication on Nuget, and then modifying PerfView to conform to the cleaned up code).    These changes should not make things noticeably different, but do have the potential for breaking things.   We have been using this version of PerfView internally for over a month without issue, so we have good confidence, but if you notice what seems to be a regression in functionality do let me know by replying to this blog entry. 




Comments (5)

  1. Bil says:

    I am currently investigating a high memory usage issue in my .NET 4.0 service application. This issue happens at random time so I would like to collect more than one traces based on memory thresholds. Is there anyway of doing it via PerfView command line?

  2. You want to use /StopOnPerfCounter to stop a trace when a perf counter goes out of range.   See the PerfView help under 'Production Monitoring', for more details.  The /CollectMultiple qualifier lets you collect more than one instance of the problem (however the PerfCounter has to drop below the threshold before it 'resets').  

  3. Bil says:

    Hi Vance, Thanks for your response. In this case, memory usage keep rising and I want to take snapshots  (say first at 2 GB and another one at 2.5 GB) to see what objects are causing increase.  In this case, if I run two PerfView instances with different threshold (2 and 2.5) will that give me two etl files. Is that a reasonable approach or you have any other tricks in sleeve for this scenario?

  4. The  PerfView HeapSnapshot /DataFile=At2GB.gcdump /StartOnPerfCounter:XXXX will do what you want (see PerfView /? for more on the options).  Start two of these with different threasholds to get two.    

  5. Emre Koştur says:

    Hi Vance, I have a problem with PerfView 1.6. I started a machine wide collection to analyze CPU stack. After 7 minutes, stopped it. Double click CPU Stack, process selection window opened. Double click one of the w3wp process, CPU Stacks window opened but I get IndexOutOfRangeException, like the link…/perfview-exception-opening-cpu-stack

    Then try to close CPU Stacks window. I get "An unhanded exception occured." StackTrace:

    System.NullReferenceException: Object reference not set to an instance of an object.

      at PerfView.StackWindow.<FinishInit>b__3e(Object sender, CancelEventArgs e)

      at System.Windows.Window.OnClosing(CancelEventArgs e)

      at System.Windows.Window.WmClose()

      at System.Windows.Window.WindowFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

      at System.Windows.Interop.HwndSource.PublicHooksFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

      at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

      at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)

      at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)

      at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

    Do you have any suggestion to solve this problem?