The C++ framework for developing highly scalable, high performance servers on Windows platforms.

Release Notes - PerfMon Tools Library


You might also be interested in the release notes for the libraries that this one is built on:


Version 7.4
  • Remove support for Visual Studio 2015.

Version 7.3
  • Clearly identify any open source software used by the framework and make it easy to disable it or see the relevant license details.
  • Preparations for making the code compile on other platforms.
  • More libraries now require that you include their Admin.h files in your Config.h file if you wish to use them.
  • Added support for a new method of dynamic object leak tracking.
  • Removed the need for WinsockWrapper.h any reference to this header should be removed.
  • Added JetByteTools::PerfMon::CSharedMemoryMutexPerformanceDataBlock which can be used when the Optex version has been deprecated. This version is also more reliable as it can't be left orphaned.

Version 7.2
  • Removal of manual "#define include guards" now that all supported compilers support pragma once.
  • Removal of out of date lint directives.
  • Added support for Visual Studio 2022 Preview.

Version 7.1 Preparations for making the code compile on other platforms. Using JetByteTools::Core::ErrorCodeToErrorMessage() rather than JetByteTools::Win32::GetLastErrorMessage().
  • No change.

Version 7.0
  • Major changes due to preparations for multi-platform support. Addition of CoreTools library which contains all cross platform code that was previously in Win32Tools.

Version 6.9.5
  • Added support for Visual Studio 2019 (16.5 - 16.9).
  • Updated project files to make release build optimisations consistent.
  • Rationalised precompiled header usage.
  • Removed unrequired includes.
  • Began to move towards removing JetByteTools\Win32Tools\Utils.h by splitting it into more functionally cohesive headers.
  • Added a CopyToSystemDirectoryRenameAndRetryHandler to JetByteTools::PerfMon::IInstallPerformanceMonitorCounters. If supplied this handler allows you to rename a performance counter dll during installation if copying it to the system directory fails.
  • Various aspects of the installation process now include schema checksums attached to ids to allow for installing a new version whilst the old version is still in use.

Version 6.9.4
  • Added support for Visual Studio 2019 (16.4).

Version 6.9.3
  • Fixed issued raised by Resharper++
  • Changed include path separators from \ to / so as to support compilation on Linux using CLANG and GCC
  • Fixed case of include file names to aid portability.
  • Migrating code towards 'modern C++' idioms.
  • Suppress warning C4355 "'this': used in base member initializer list" in Warnings.h and remove per file suppressions. We just use this idiom far too often for it to be a special case.
  • Added support for Visual Studio 2019 (16.3).
  • Dropped support for Visual Studio 2013.

Version 6.9.2
  • Added support for Visual Studio 2017 (15.6 - 15.9).
  • Added support for Visual Studio 2019 (16 - 16.2).
  • Design change to allow for multiple kinds of data collection rather than simply collection via a known shared memory segment. We can now create a performance data block internally to the process and expose the counter data via an API to the internals of the process. This lets the process itself define an API for viewing its performance counters and allows us to support things like Prometheus on Linux in addition to the normal PerfMon collection on Windows.
  • Fixed a performance issue in the JetByteTools::Perfmon::CPerformanceDataBlock class where we were allowing counters to become unaligned and to span cache lines.
  • Design change to allow for monotonic counters that are also exposed as a 'per second' counter to be managed as a single counter using JetByteTools::PerfMon::CCPerformanceDataSchema::AddLinkedPerSecondCounter(). This call creates a per second counter that is linked to the counter that was added immediately prior to this call. The per second counter is exposed for collection as a distinct counter but this simply points to the same physical counter as the linked monotonic counter. This reduces the number of counter manipulation calls that need to be made and improves performance.

Version 6.9.1
  • Added support for Visual Studio 2017 15.5.

Version 6.9
Version 6.8
  • Made pragma once unconditional in headers.
  • Fixed issued raised by PC-Lint Plus.
  • Fixed issued raised by CppDepend
  • Fixed issued raised by Resharper++
  • Use override rather than virtual for implementations of virtual functions in derived classes.

Version 6.7
  • No changes.

Version 6.6.6
  • No changes.

Version 6.6.5
  • No changes.

Version 6.6.4
  • No changes.

Version 6.6.3
  • Ran Visual Lint using Gimpel PC Lint on all code and adjusted to remove warnings and fix bugs.
  • Removed all use of exception specifications. We only ever used throw() but that's now gone too.
  • Protected non-virtual destructors on interfaces are now virtual even though they you can't delete the object via the interface.
  • All destructors that could throw exceptions now have optional "log and swallow" exception handlers which are enabled by default. This is better than ignoring the problem and being faced with a call to std::terminate() which can be hard to track down.

Version 6.6.2
  • Changes to remove non-trivial, function level static objects from the code, the construction of which is problematic in multi-threaded code.

Version 6.6.1
  • No changes.

Version 6.6
Version 6.5.9
  • Adjustment to the changes made in 6.5.6 for JetByteTools::PerfMon::CPerformanceCounterInstaller::Uninstall(). This now throws an exception on Vista and later for ERROR_ACCESS_DENIED as the library code expects this to allow it to perform the "auto elevation" stuff which allows a second chance at installing the counters whilst elevated.
  • Added JetByteTools::PerfMon::CPerformanceMonitorCounters::CanCreateCounters() and JetByteTools::PerfMon::CPerformanceDataBlock::CheckTokenPrivileges() so that calling code can check to see if the user has the correct privileges to be able to install the counters. Returns true if they do.

Version 6.5.8
  • No changes.

Version 6.5.7
  • Updated our support of Visual Studio 2012 to the RTM version. Added a few more warning suppressions. Fixed the solution file format so that it's actually a 2012 solution file and not a 2010 solution file using the 2012 tool chain.
Version 6.5.6
  • Updated our support of Visual Studio 2012 (11) to the RC version. Added a few more warning suppressions. Renamed the output directories. Renamed the solutions and projects from .11. to .2012.
  • JetByteTools::PerfMon::CPerformanceCounterInstaller::Uninstall() now returns a DWORD which details any reason for failure to remove the counters. We also remove the counter dll during counter removal rather than just removing the registry entries. This means that if perfmon is currently open or the counter dll is in use or inaccessible then the registry entries will NOT be removed. This prevents a removal appearing to succeed and a subsequent re-installation failing because the old counter dll is still present and in use.

Version 6.5.5
  • Fixed some warnings generated by /analyze.
  • Minor adjustment to remove another unnecessary, VC6 specific, for loop scope issue.

Version 6.5.4
  • Minor adjustment to remove a VC6 specific for loop scope issue.

Version 6.5.3
  • No changes.

Version 6.5.2
  • No changes.

Version 6.5.1
  • No changes.

Version 6.5
  • No changes.

Version 6.4
  • No changes.

Version 6.3.3
  • No changes.

Version 6.3.2
  • No changes.

Version 6.3.1
  • No changes.

Version 6.3
  • Lots of white space changes which make comparing actual changes with 6.2 quite hard. Sorry.
  • Breaking change renamed CounterTypePerSec to CounterTypePerSec32.
  • Renamed CounterTypePerSec64.
  • Renamed CounterTypeAverage32 and CounterTypeAverageBase.
  • Added JetByteTools::PerfMon::CPerformanceDataBlock::GetNumberOfInstancesAllocated() which is useful for knowing when you can reset shared counter instances, like _Total counters, etc.
  • Added JetByteTools::PerfMon::CPerformanceMonitorCounters::GetNumberOfInstancesAllocated() which is useful for knowing when you can reset shared counter instances, like _Total counters, etc.
  • Added JetByteTools::PerfMon::CPerformanceMonitorCounters::ResetPerformanceObjectInstance() which is useful for reseting shared counter instances to zero.
  • Added JetByteTools::PerfMon::CPerformanceMonitorCounters::SetPerformanceCounter32() and JetByteTools::PerfMon::CPerformanceMonitorCounters::SetPerformanceCounter64() which allow you to do an interlocked exchange to set the counter value to a new value.

Version 6.2
  • Fixed a bug with the viewing of remote performance counters which would prevent you from viewing any performance counters on the remote machine. See here http://www.lenholgate.com/archives/000897.html for details.
  • Removed the whole broken concept of JETBYTE_PERFMON_SAFE_BUT_SLOW_64BIT_OPERATIONS which allowed 64 bit wide counters to be accessed in a non atomic manner if the various InterlockedXXX64() intrinsics weren't available if it was set to zero. Now there's no way of turning off the lock used to ensure atomic increments of 64 bit values if required. This will prevent 64 bit counter values from being completely broken if compiled with JETBYTE_PERFMON_SAFE_BUT_SLOW_64BIT_OPERATIONS set to zero on a platform that doesn't support InterlockedXXX64(). Note that we don't use a multi-process lock across the whole of the performance data block as we would have done if JETBYTE_PERFMON_SAFE_BUT_SLOW_64BIT_OPERATIONS was enabled; this means that if a single counter is being updated from multiple processes then it has the potential to become corrupted but this is the same as if we were using InterlockedXXX64(). If you wish to protect a shared counter from corruption then you need to explicitly lock the performance data around the update.

Version 6.1.1
  • No changes.

Version 6.1
Version 6.0
  • No changes.

Version 5.2.5
  • No changes.

Version 5.2.4
  • Added some more documentation.

Version 5.2.3
  • No change.

Version 5.2.2
  • Added a checksum system to the schema and the installer. You can now extract a checksum from a schema and pass it to the installer, this is then written to the registry as part of the installation process. When you come to create your counters you can compare the checksum of your schema with the checksum that the installer retrieves from the registry and spot if the installed counters don't match the schema that you're expecting.
  • Added JetByteTools::PerfMon::IInstallPerformanceMonitorCounters::CanInstall() which returns true if the installer can install the counters; you can use this to check to see if the account that the process is running as has the required permissions to install the counters.
  • Added code to the installer to validate the counter dll. This checks that the dll is built for the expected processor architecture (x86 or x64) and that it exposes the expected entry point functions.
  • Fixed a bug in the installer. An x86 process can now correctly install an x64 counter dll.

Version 5.2.1
  • VS 2008 support - Adding projects and solutions and excluding warning 4627...
  • This is the first release built using continuous integration, some project file fixes to fix incorrect output directories, etc so that x64 and x86 builds can be done in complete isolation.

Version 5.2
  • Complete rewrite to support Vista, x64, multiple languages and multiple performance object instances.

There were no release notes for this library prior to version 5.2

Generated on Sun Sep 12 19:06:45 2021 for The Server Framework - v7.4 by doxygen 1.5.3