Why is Profiling Important?

Profiling is an important part of application development because profiling allows you to identify parts of your software that do not perform as well as you may have expected when the application was designed. Profiling, when combined with regression tests also allow you to identify when your application has become slower due to a bug fix or feature change.

If you do not measure the performance of your application, you cannot tell when you have improved the performance or when the performance has degraded. Your customers may notice a degradation in performance, however by this time it may be too late to convince your customer that your software is worthwhile – they may be looking at a competing, faster product.

Performance analysis allows you to perform the following tasks.

  • Establish a baseline performance level for your application against which all future performance levels are measured.
  • Monitor the performance of your application as new features are added to the application. This will help you identify when performance improvements and performance regressions occur and why – by error or by intentional design?.
  • Identify performance bottlenecks and poor quality algorithms.
  • Improve the performance of your application.
  • Develop repeatable performance measurements for use in regression tests.

Why is Performance Validator useful for Performance Profiling?

Performance Validator is a good tool for Performance Profiling because it provides a complementary mix of low overhead sample-based profiling and instrumentation-based profiling with innovative user interfaces to provide insight into your application’s execution not available with competing tools.

  • Sampling profiler for instant profiling with low-performance overhead.
  • Six instrumentation profilers with different timing accuracies and overheads.
  • Eight data visualization displays for analyzing executing applications and post-execution data analysis.
    • Callstack.
      View the callstack in any thread as the callstack changes.
    • Statistics.
      Processed statistics from your application.
    • Relations.
      Unprocessed statistics from your application, with caller functions and called functions.
    • Call Tree.
      Hierarchical call tree with various sort options.
    • Call Graph.
      Hierarchical call graph with various sort options.
    • Analysis.
      Multiple query options with hierarchical graphs to display the query results.
    • Line Timing.
      Individual line timing display for analyzing which lines in an algorithm take the most time.
  • Support for multiple restricted instrumentation options, allowing you to instrument just the parts of your application you want – no need to instrument the whole application. You can restrict instrumentation by
    • Source code path.
    • Third-party source code path.
    • Other (unspecified) source code paths.
    • DLL name.
    • Class, class and method, function name.
    • Source code file extension type.
    • Source code file name.
  • Support for restricted data collection, only collect data whilst the application is executing certain parts of your code, or never collect data whilst the application is executing certain parts of your code.
  • Support for resetting performance statistics part way through a performance test – useful if you make a mistake in your test.
  • Support for starting and stopping performance data collection during a performance test.
  • Support for embedding visit count and time information in source code displays.
  • Multiple session compare – compare one test run with another to detect improvements and regressions.
  • Regression test support.
  • Works with Windows NT services.
  • No requirement to modify your code base.

Fully functional, free for 30 days