.NET Memory Profiler Release Notes
Below is a summary of additions and changes to .NET Memory Profiler:
Version 5.0.74, released April 20, 2015
- New: It is now possible to show unreachable instances in the Type details view.
If there are any unreachable instances in the snapshot, an "Include unreachable instances" option will be available under the instances list.
- Fix: A NullReferenceException could occur when collecting the final peak snapshot after debug profiling has stopped.
- Fix: Resource instances list was not correctly updated when collecting or changing a snapshot in a session.
- Fix: Real-time data was not correctly cleared when the time selector was moved outside the data range.
- Fix: Layout of the real-time view is now correctly saved and restored.
- Fix: A NullReferenceException could occur in the instance graph when shutting down the profiler.
- Fix: Duplicate sort entries was sometimes added to the "Sort stacks by" drop-down list.
Version 5.0.73, released March 26, 2015
- Fix: A NullReferenceException could occur when working with an old session file and displaying instance fields of an instance without field data.
- Fix: An ArgumentException could occur when displaying instance fields and of an instance with unknown fields.
Fields may be unknown when importing memory dumps or attaching to a process using Debugging Tools.
- Fix: The Recent sessions sub-menu in the main menu is now populated.
Version 5.0.72, released March 24, 2015
- New: New WPF based user interface
- New: Easily run unit tests under the profiler using the Visual Studio test runner
- New: Remote profiling
- New: Profile multiple processes within the same session
- New: Work with multiple sessions in the standalone profiler
- New: Improved real-time presentation
- New: Support for snapshots that are larger than 4 GB
- New: Support for Visual Studio 2015 and .NET Framework 4.6
- New: Support for Azure compute emulator projects in Visual Studio
- New: More efficient collection of instance fields data and a simplified UI to specify what to collect.
- New: New Enterprise edition
The Enterprise edition includes features such as: Visual Studio unit test runner, multi-process profiling, multiple sessions in standalone profiler, Azure compute emulator profiling. For more information, see the editions comparison.
Version 4.6.86, released September 8, 2014
- Fix: An access violation could in rare cases occur when a type was initialized in the profiled process.
- Fix: Improved support for import and attach of large 32-bit processes.
- Fix: Extract static fields could fail when importing memory dumps or attaching using Debugging Tools.
- Fix: Minor improvement related to the storage of registration information.
- Change: Increased timeout when starting and stopping services.
Version 4.6.77, released May 14, 2014
- Fix: Symbol files were not loaded correctly if a cache folder was not specified for the Microsoft symbol store.
- New: Prompt for symbol settings when running with the resource tracker for the first time.
Symbol settings must be specified to get accurate resource allocation call stacks.
- Change: Improved performance when viewing Type details in a session with many types.
- Change: Improved performance when viewing resource instance details in a large session.
- Change: Minor improvements to the dispose tracker.
- Fix: An exception could occur when copying instance graph to clipboard.
Version 4.6.71, released April 8, 2014
- Fix: Static fields not always correctly reported when importing a memory dump or attaching using Debugging Tools. This could cause an unhandled exception in the profiler.
Version 4.6.69, released February 25, 2014
- Fix: Static enum fields not based on int or uint were incorrectly reported, and could cause the profiling session to stop.
Version 4.6.68, released February 11, 2014
- Fix: Static primitive value types fields were not correctly collected when importing memory dumps. This could cause an exception in some cases.
- Fix: Minor improvement of the presentation of native memory when importing a memory dump or attaching using Debugging Tools.
- New: Static enum fields are now also included when collecting a heap snapshot and importing memory dumps.
Version 4.6.66, released December 17, 2013
- New: Added command line arguments to start Silverlight profiling from the command line (including NmpCore)
The new commands are /slx "<path to XAP-file>" and /slu "<URL of Silverlight application>". The argument "/oob" can be used to run the Silverlight application as "out-of-browser".
- New: Added an option to only include new issues in the memory analyser
The command "Profiler->Only show new issues" can be used to only show issues for instances that were allocated after the comparison snapshot.
- Fix: Added a fix for GCHandle identification, since GCHandles are no longer reported as GCHandle roots by .NET runtime 4.0.30319.18408.
- Fix: Fixed an error that could cause a Win32Exceptin when showing dialogs within Visual Studio.
Version 4.6.63, released December 12, 2013
- Fix: The predefined list of ignored framework issues failed to load, causing too many issues to be presented.
Version 4.6.59, released October 22, 2013
- Fix: An access violation could occur in the profiled process when heap utilization tracking was enabled, and more than 256,000 instances were collected during a GC.
Version 4.6.58, released October 11, 2013
- New: Support for Visual Studio 2013
- New: All static fields are collected when importing or attaching to a process running under .NET runtime 4.0.30319.17379 or later.
Previously only reference fields were collected. .NET runtime 4.0.30319.17379 is included with .NET Framework 4.5, and will be used for processes using .NET Framework 4.0 or later.
- Change: AppDomain and Thread information is presented for static fields, when importing a memory dump, or attaching using Debugging Tools.
- Fix: Fixed an InvalidCastException that could sometimes occur when importing a memory dump, or attaching using Debugging Tools.
- Fix: A pending peak snapshot is collected when profiling is stopped in NmpCore.
- Fix: Added implementations for a missing debug interface, needed for Debug profiling.
Version 4.6.52, released September 5, 2013
- Fix: Reporting memory regions could take a very long time when profiling a 32-bit process from Visual Studio, on a 64-bit OS prior to Windows 8/Windows Server 2012.
Version 4.6.48, released August 15, 2013
- New: Native memory statistics presented under the Native memory view.
The statistics include information such as managed heap usage and utilization, fragmentation and largest allocatable memory block.
- New: Native memory information is retrieved when importing 64-bit memory dump files.
- New: Native memory information is retrieved when profiling a 64-bit process from a 32-bit process (i.e. from within Visual Studio)
- New: Support for Windows 8.1.
- New: Support for .NET Framework 4.5.1.
- New: Instance generation is collected even when attaching to a process or importing a memory dump.
Previously the instance generation was only collected when running the profiled process under the profiler, with instance tracking enabled.
- Fix: An InvalidCastException could occur when viewing a static pointer field.
Version 4.6.40, released June 19, 2013
- Change: "Collect gen #0 snapshot" has been re-enabled for .NET Framework 4.5.
It was previously disabled when .NET Framework 4.5 was installed, due to a pre-beta bug in the .NET runtime.
- Change: When combining nodes in graph, the type name is used when sorting combined instances.
This prevents unnecessary visual changes in the graph when the content is updated incrementally.
- Change: Improved synchronization when adding duplicate instances issues, to prevent user interface from becoming unresponsive.
- Fix: Fixed a buffer overrun that could occur with long method names, when importing memory dumps or attaching using Debugging Tools
- Fix: Syncing the graph with the root path, call stack, and instances list, did not work correctly when the graph window was maximized.
- Fix: Fixed an access violation that could occur when multiple modules were loaded simultaneuosly in separate threads.
- Fix: Selection in instances list under Type/Filter details not correctly updated when the list changes.
- Fix: "Show hexadecimal values" now works correctly for static fields under Type details.
Version 4.6.29, released May 28, 2013
- Fix: If a process contained static char fields with non-ASCII characters, the second snapshot could fail.
Version 4.6.26, released May 8, 2013
- Fix: An exception could occur when renaming snapshots while saving a session
Version 4.6.25, released May 6, 2013
- New: Combined instances graph for Type and Filter details
- New: Support for Windows Store app profiling
- New: Identification of closure and state types
- New: Information about closure types is used by memory analyser
- New: Improved duplicates analyser
- New: Static field values presentation under Type details and Instance details
- New: Instance addresses can be included when importing memory dumps
Version 4.5.215, released April 23, 2013
- New: Added an option to select whether to run AnyCPU as applications as 32-bit or 64-bit when debug profiling
Debug profiling functionality is limited when running as 64-bit. If possible, it is recommended that AnyCPU applications are run as 32-bit.
- Fix: Fixed an exception that could occur when unloading AppDomains while using debug profiling.
- Fix: The workaround for a memory leak in sos.dll prior to .NET runtime 4.0 was disabled and has now been re-enabled.
Version 4.5.213, released April 5, 2013
- Change: If Ctrl-C or Ctrl-Break is pressed in a .NET Memory Profiler console window (e.g. NetMemProfilerConsole or NmpCore), the profiler will stop gracefully, allowing you to save the session file.
- Change: If a .NET Memory Profiler console window is closed, the profiler will perform a quick stop and detach any attached processes. The session file will not be saved, but the auto-saved session can be recovered by restarting the profiler (with full UI).
- Fix: Fixed an issue with a case-sensitive file extension, which could prevent the profiler from opening sessions and projects from the command line.
- Fix: The About window and splash screen always stated that the "Professional" edition was active, even when running as the "Standard" edition.
Version 4.5.211, released February 21, 2013
- Fix: The instance graph was not correctly cleared when the selected instance no longer exists (e.g. when selecting a new snapshot). This could cause an exception when moving the mouse over the graph.
- Fix: Tooltips in instance graph did not always appear if the selected instance had no non-shortest paths.
- Fix: If instance data was not included in an auto-saved session file (e.g. by using the command line parameter /iid-), the session file could become corrupt.
Version 4.5.207, released February 18, 2013
- Change: Timeout value for API attach has been set much higher, and the attach has been made cancelable.
Retrying attach did not work very well, so a longer time-out value is used instead.
- New: Added ignorable framework issue for resurrected OverlappedDataCache.
- Fix: Managed threads are identified again in the Native memory view.
Version 4.5.204, released February 12, 2013
- Change: Retrying attach using API if the attach fails with a timeout error.
- Fix: Weak roots were not correctly collapsed in the instance graph, which could create very large graphs.
- Fix: Debug profiling could cause an access violation when running under Windows XP.
- Fix: An exception could occassionally occur when async operations finished after the profiler comparison had changed.
- Fix: It is no longer possible to close the profiler wait form by using Alt-F4, as that could cause an exception.
- Fix: When starting IIS Express profiling the profiler could connect to the wrong process (i.e. IISExpressTray instead of IISExpress).
Version 4.5.194, released January 18, 2013
- Fix: Editing the port number of WebDev.WebServer when starting Silverlight profiling would always cause a validation error.
- Change: If save fails when closing a session window, the window will not be closed. This gives the user an opportunity to save as another file.
- Change: If an active session in a profiler project overwrites another session file in the project, multiple entries for the same file will no longer be added.
- Fix: A minor layout error of dock windows at start up has been fixed.
Version 4.5.192, released December 7, 2012
- Fix: Higher level non-shortest root paths were not always calculated correctly when the instance graph contained weak reference roots.
- Fix: Third party assemblies (DevExpress) in the GAC were removed when installing an upgraded version (Microsoft KB 905238).
- Change: The "Potential memory leaks" filter is not included under the Overview page, unless a potential memory leak has been detected by an assertion.
Version 4.5.189, released November 22, 2012
- Fix: Added implementations for a few missing debug interfaces, needed for Debug profiling.
- Fix: Removed dependency on .NET Framework 3.5 when integrating with Visual Studio 2005 (only .NET Framework 2.0 is now required).
- Change: Debug profiling commands removed from Visual Studio 2005 integration, since debug profiling is not available under VS2005.
Version 4.5.186, released October 26, 2012
- Fix: Fixed a problem with the obfuscator, which prevented the profiler from running under the client profile of .NET Framework 4.0.
- Fix: Minor improvements to the licensing user interface.
Version 4.5.184, released September 26, 2012
- New: Support for very large objects in .NET Framework 4.5 (instance size > 4GB).
- New: Dynamic references (using ConditionalWeakTable) are included as additional fields for instances.
They are presented in the instance details view (instance graph, references, referenced by, and fields)
- Change: New implementation of Debugging Tools import and attach, to avoid a memory leak in the .NET runtime included with .NET Framework 4.5.
The new implementation is significantly faster and provides more detailed information.
- Change: Weak roots are included in the instance graph (for all instances that are part of a shortest root path).
- Fix: Included some missing files in NmpCore. The files are required for the resource tracker to work when running NmpCore on Windows XP.
- Fix: Instances in the finalizer queue was tagged as both "Instance queued for finalization", and "Indirect finalizer instance".
- Fix: Roots not always correctly presented under "Referenced by" in the Instance details view, when using the profiler project window to compare snapshots.
Version 4.5.179, released August 31, 2012
- New: Support for IIS Express 8.0.
- Change: If the collect-and-stop command line argument is specified, the max snapshots setting will not limit the number of auto-collected snapshots.
- Change: NetMemProfilerConsole prints progress messages in console window, instead of showing a message window.
- Fix: Storing additional data (e.g. duplicate instances information) in session files, could cause the session file to be corrupted.
- Fix: The "Enable resource tracker" setting was not correctly stored in profiler project files.
- Fix: Fixed a version mismatch in the unmanaged resource stack walker, which could cause the stack walker to fail when loading symbol files.
- Fix: If a non-existing process was specified on the command line when attaching, an "unexpected exception" error window was shown, instead of an error message.
Version 4.5.176, released August 10, 2012
- New: Added the option to only detect trivial duplicate instances, which will make the duplicate instances analysis much faster.
Trivial duplicates detection is enabled using the Profiler->Only detect trivial duplicates command.
- Fix: Fixed a problem with snapshots with more than 2 GB of data.
Up to 4 GB of data can now be collected for each snapshot.
- Change: Temporary snapshots that are saved by an active session are no longer compressed.
Compressing snapshot data could cause snapshot collection to take much longer time. Now snapshot data is only compressed when saving the session file.
- Fix: Fixed a NullReferenceException that could occur when attaching using Debugging Tools with command line parameters (i.e. using the /da argument).
Version 4.5.173, released July 11, 2012
- Change: Debugging Tools installer can now also be downloaded from the .NET Memory Profiler site (as an alternative to installing the Windows SDK).
- Fix: Symbols were not correctly downloaded from symbol server, which could cause native call stacks to be less detailed.
- Fix: Links in info views were not always correct, preventing some information in the view from being presented.
Version 4.5.169, released July 2, 2012
- Fix: An ArgumentException could very occassionally occur when updating the status bar in Visual Studio.
- Fix: Showing the details of an unmanaged resource in a session file saved by version 4.5 could cause an exception.
- Fix: Fixed a problem with the native stack walker that could cause a crash on Windows XP.
- Fix: Fixed an error that could cause the session file to become corrupt when collecting multiple snapshots.
- Fix: Native memory information was not always correctly presented when attaching to a process using Debugging Tools and collecting multiple snapshots.
- Fix: Due to a memory leak in the .NET Runtime that is included with .NET Framework 4.5, it is currently not possible to attach or import using Debugging Tools on machines
where .NET Framework 4.5 is installed.
A workaround for this issue will be created if it still exists in the RTM version of .NET Framework 4.5.
- Fix: A workaround for another memory leak in the .NET Runtime (when attaching or importing using the Debugging Tools) failed for processes using .NET Runtime 2.0.
- Fix: The unreachable instances columns were not included by default when opening a session file that contained unreachable intances.
Version 4.5.162, released June 20, 2012
- Fix: Changed signature of 3rd party library (DevExpress) to avoid conflicts with other installations when running within Visual Studio.
Version 4.5.158, released June 14, 2012
- Fix: Attaching and importing memory dumps could cause the profiler to hang if the Debugging Tools were not installed on Windows 8.
- Fix: Links in info views did not work correctly when running under Windows 8.
- Change: Added the possibility to specify the sos.dll file when importing memory dumps.
Version 4.5.155, released June 8, 2012
- Fix: A subscription expired message was sometimes shown even if the subscription was already renewed.
- Change: Visual Studio 2012 integration tested and the text "Visual Studio 11" changed to "Visual Studio 2012".
Version 4.5.154, released June 4, 2012
- Fix: A missing implementation of a Visual Studio debug interface could cause debug profiling to fail.
Version 4.5.153, released May 29, 2012
- New: Debug profiling.
Debug profiling allows you to launch the debugger and profiler simultaneously and get profiler integration in the watch windows (Watch, Locals , Auto, and debugger tool tips) – and you can collect snapshots while you have stopped at a breakpoint
- New: Duplicate instances analyzer.
Optimize memory usage by getting information about duplicate instances. This includes simple duplicates like strings and boxed primitive values, as well as complex duplicate instance graphs.
- New: Presentation of total held instances and bytes for all types and filters.
Held bytes information is calculated and presented for each type and filter in the Overview. This often gives a better idea of which types are consuming a lot of memory.
- New: New session file format.
The session file format is completely redesigned. It is faster, the session file is much smaller (it has less data and data is compressed) and there is no longer a 2 GB file limit
- New: Visual Studio 11 integration.
Version 4.0.133, released May 20, 2012
- Change: Instance data collection rules were not saved correctly when editing session settings.
Version 4.0.131, released April 18, 2012
- Change: Added support for Debugging Tools included in the Windows 8 SDK.
- Fix: If a snapshot collection failed, the temporary file containing instance data was mistakenly closed. Selecting new snapshots could then cause a "closed file" error.
- Fix: Heap utilization data was counted multiple times when a new filter was created, which could cause > 100% utilization.
- Fix: When unloading AppDomains, module metadata was not properly released for modules containing Dispose methods.
- Fix: Failed to evaluate many static fields when attaching to a process using the profiling API.
- Fix: An access violation could occur within the profiled process if a snapshot was collected while an AppDomain is being unloaded.
Version 4.0.125, released March 5, 2012
- Fix: Snapshot collection failed when running under .NET Framework 4.0 or 4.5, when the .NET Framework 4.5 preview has been installed (runtime version 4.0.30319.17379 or later).
Version 4.0.124, released February 23, 2012
- New: IISExpress support added for website projects in Visual Studio (in addition to web applications).
- Fix: Column customization window in Visual Studio became hidden behind the Visual Studion window.
- Fix: The native memory view now analyses memory up to 4GB in 32-bit processes marked as LARGEADDRESSAWARE.
- Fix: A NullReferenceException could occur in a truncated instances list under Type details.
- Fix: Better error messages if project profiling in Visual Studio cannot be started.
- Fix: Better error message if a software triggered snapshot fails.
- Fix: An ArgumentOutOfRangeException could occur if the size of the scrollbars in the plot became too small.
Version 4.0.119, released January 13, 2012
- New: The resource tracker now correctly tracks handles created by CreateProcess and CreatePipe.
- Fix: The resource tracker did not detect that the HDC was closed when calling CloseEnhMetaFile.
- Fix: A synchronization error in the resource tracker has been fixed.
- Fix: An InvalidCastException could occur when profiling a 64-bit process and viewing the fields of an instance containing a UIntPtr field.
Version 4.0.118, released November 16, 2011
- New: Added support for ASP.NET profiling using IIS Express.
- Change: The maximum session file size has been increased to 4GB.
- Fix: A better error message is shown if the maximum session file size is exceeded.
Version 4.0.114, released October 10, 2011
- Fix: Fixed an access violation that could occur when a unloading an assembly.
- Fix: Initializing security for temporary directory created for NmpCore, to provide better support for profiling services running under another user account.
- Fix: Command line arguments parser did not parse arguments with separated values correctly.
Version 4.0.111, released September 26, 2011
- New: The profiler now more accurately waits for pending finalizers
when collecting a full snapshot.
This allows the analysis issue "Instances queued for finalization" to better indicate whether this is normal behaviour (i.e. an informational issue) or a problem with slow, excessive, or stuck finalization (i.e. a warning issue).
- New: A link has been added to the "Held instances" info text under type instance details. Clicking the link will show a filter for all instances held by the selected instance.
- Change: When ignoring an analysis issue using a root path or allocation stack that contains generic parameters, all instantiations are now ignored.
- Fix: Tool tips were missing for the type name when grouping instances by type under the Filter details view.
- Fix: An exception could occur if the comparison changed while retrieving call stack details in the Call stacks/Methods view.
- Fix: The "Disposed" column was shown for disposable types under the Type details view, even if the dispose tracker was not enabled.
- Fix: The native memory trees under the Native memory view didn't scale correctly when running under a high-DPI setting.
- Fix: Analysis issues were not completely updated in the Type details view and the Type instance details view if a type or instance was shown before the analysis was finished.
- Change: The full path of memory mapped files and loaded libraries is no longer limited to 260 characters.
- Fix: Improvements in the instance graph user interface, including fixes for animations that "jumped" to an incorrect start positions.
- Fix: An exception could occur if an interactive graph operation (e.g. expand nodes) was started while the graph was being collapsed.
- Fix: Runtime filter was not used in some locations, e.g. the instance list under Type/Filter details view.
Version 4.0.108, released September 12, 2011
- Fix: Static fields not always retrieved when profiling a pre-.NET
4.0 64-bit process due to a Windows 7/Windows Server 2008 R2 security update.
The Microsoft security update MS11-044 included a change in the .NET runtime that could cause static field evaluation to fail.
- Fix: Changing AppDomain or Runtime did not affect the real-time graph, unless at least one snapshot was collected.
- Fix: Call stack generic function names were incorrectly encoded, '<' was presented as '<' in the tooltip.
- Fix: NullReferenceException could occur when showing tooltips for the "[truncated]" entry in an instance list.
- Fix: Ignoring analysis issues by call stack frame did not work correctly.
- Fix: Call stack could become incorrect if an exception was thrown
and handled by a dynamic method.
Under certain circumstances an exception could also occur in the profiled process.
- Change: Scroll position is no longer reset in the info views that present analysis issues.
Version 4.0.102, released September 2, 2011
- New: Added MemProfiler.AreAssertionsEnabled property to detect whether memory assertions are available.
- Fix: Instance data was mistakenly included in some autosaved snapshots, even if IncludeInstanceData was false.
- Fix: Fixed an error in profiler attacher that could cause the attacher to crash.
Version 4.0.96, released August 26, 2011
- Fix: Improves the possibility to add registration information during installation by using the REGNAME and REGKEY properties.
- Fix: Better detection of Silverlight installation.
Version 4.0.94, released August 25, 2011
- Fix: Fixed a problem with initialization of environment variables when profiling a Windows service.
- Fix: Minor UI fixes.
- Change: Common 32/64-bit installer available as an executable launcher.
- Fix: Symbols were not always loaded when profiling within Visual Studio.
Version 4.0.89, released August 19, 2011
- Fix: Minor UI fixes.
- Fix: Fixed an exception that could occur during license registration.
- Fix: Visual Studio 2010 integration failed to install if the Visual Studio help was not initialized.
- Fix: If sorting on held instances/bytes in the Type/Filter details instance list, the message "Filtering instances" would appear repeadetly, without making any progress.
Version 4.0.82, released August 12, 2011
- New: Instance graph
- New: Guided profiling
- New: Instance and allocation filters
- New: Support for Silverlight profiling
- New: Faster and more secure attach to process, using the .NET 4.0 profiling API
- New: Profiling levels for balancing the amount of data collected against the performance and memory overhead of the profiler
- New: Support for multiple .NET runtimes in the same process
- New: Improved real-time data collection, with AppDomain and runtime filtering and much improved performance
- New: Peak snapshot collection
- New: Dependency property evaluation
- New: NmpCore tool
Version 3.5.166, released November 23, 2010
- Fix: If profiler enhanced NGen images has been installed (using ngen /profile), the dispose tracker did not work correctly.
Version 3.5.162, released October 17, 2010
- Fix: If a specific mscordacwks.dll file was selected and the file no longer exists, an unhandled exception occured.
Version 3.5.160, released October 6, 2010
- Fix: Added a workaround related to static fields evaluation for .NET runtime 4.0, to avoid an access violation when evaluation roots.
Version 3.5.159, released August 25, 2010
- Fix: Automatically disables features that are not available when
profiling a Silverlight application.
Declarative assertions, the unmanaged resources tracker, and gen #0 snapshots are currently not available when profiling Silverlight.
- Fix: Method roots was not correctly identified when running under .NET Framework 4.0.
Version 3.5.157, released August 5, 2010
- New: Limited support for Silverlight profiling.
It is now possible to profile a Silverlight application using IExplore.exe and SLLauncher.exe
- Fix: Removed dependencies on assemblies not included in .NET 4.0
Now it is possible to use the profiler on a system that only has the client profile of .NET 4.0 installed.
- Fix: Data collection rules didn't work correctly for specific array types.
- Fix: The number of root referrers in the instance details view
has been limited
This prevents the user interface from becoming very slow when an instance has a lot of root referrers.
- Fix: Better lookup of WebDev.WebServer.
Now the development server included with Visual Studio 2010 is used for .NET 2.0 sites as well.
Version 3.5.151, released June 15, 2010
- Fix: Type name of arrays of nested types and generic types was
not correctly presented in the Types view
The declaring type and the generic type arguments were not correctly included in the name.
- Fix: Corrupt session files created by v3.5.131 can now be loaded.
Version 3.5.150, released May 25, 2010
- New: If more than one Web development server (WebDev.WebServer)
is found the user will be presented with the option to select development server.
When profiling a Visual Studio ASP.NET project, the development server is automatically selected based on the target framework of the project.
- Fix: A file was missing in the previous installer, which caused problems with the dispose tracker when profiling a .NET 1.x application.
Version 3.5.144, released March 31, 2010
- Fix: All dependencies of .NET Runtime 2.0 removed, it is now possible
to install and use the profiler on a system with only .NET 4.0 installed.
Previous version had a few left-over dependencies that required the .NET 2.0 runtime to be installed, even if both the profiler and the profiled process was running under .NET 4.0.
- Fix: When selecting Cancel in the evaluation window, the profiler did not exit completely.
Version 3.5.136, released February 22, 2010
- Fix: Links to additional information about undisposable types classification did not work correctly in the tooltips in the Types/Resources view.
- Fix: Saving session files with multiple snapshots could cause corrupt files to be created.
- Fix: The live bytes sum in the status bar was not correct (but the column sum value correctly reflected the total number of live bites).
- Fix: Better support for command line response files.
- Fix: Fixed an additional problem that could cause an exception during initialization of Managed C++ programs under rare circumstances.
- New: Column sum values are presented for the columns "New live bytes" and "Removed live bytes" in the Types/Resource view.
Version 3.5.131, released January 29, 2010
- New: A new memory analyzer will provide information about instances in the finalizer queue.
- Fix: When switching away from certain settings pages in Visual Studio (Tools->Options), an endless WM_GETDLGCODE loop could occur, causing Visual Studio to freeze.
- Fix: User interface was not correctly updated when initializing symbols store cache location.
- Fix: Fixed a problem that could cause an exception during initialization of Managed C++ programs.
- Fix: Under rare circumstances the native stack walker could get stuck in an infinite loop.
Version 3.5.130, released January 11, 2010
- Fix: Due to an error introduced in v3.5.115 the native stack walker
failed to use newly downloaded symbols from the Microsoft symbol store.
This error caused native stack information to be less detailed for operating system DLLs and .NET runtime DLLs..
- Fix: Instances only reachable from a WeakReference was considered
reachable when attaching and importing
This could also cause problems when calculating held instances..
- Change: Significantly improved performance when analyzing held instances in large snapshots.
- Change: The number of background calculations is limited by available
Some background calculations consumes significant amounts of memory. To minimize the risk of an out-of-memory error, the calculations are not performed simultaneously in a low memory condition.
- Change: The number of instance issues presented by the comparison analyzer has been limited to 10,000 issues per type.
- Change: Decreased the memory consumption and largest memory block allocated when attaching to a process and importing memory dump files.
- Change: Tries to locate Debugging Tools before importing a memory dump file, to avoid DbgEng.dll and DbgHelp.dll version mismatch on Windows XP.
- Fix: Improved matching of types when comparing snapshots from different sessions.
Version 3.5.115, released November 24, 2009
- Fix: When calculating held instances, weak roots were incorrectly considered to hold an instance.
- Change: All shortest root paths are considered when sorting the
root paths in the Type details view, even if only the 1000 first root paths are
This will consume a bit more memory, but will provide better type root path information.
Version 3.5.114, released November 18, 2009
- Change: A specific mscordacwks.dll can be selected when importing
memory dumps, instead of selecting the folder where it is stored.
The name of the mscordacwks.dll file is also no longer important, .NET Memory Profiler will make sure that the name is correct.
- New: Added the possibility to import 64-bit memory dumps containing a 32-bit .NET process.
- Fix: If an allocation fails within the profiled process, a message about this will be presented to the user.
- Fix: Further reduced the size of the largest memory blocks allocated
within the profiled process.
This reduces the risk of running out of virtual address space in a 32-bit process
Version 3.5.110, released November 11, 2009
- Fix: Installs 3rd party UI libraries in GAC to avoid potential assembly load problems when running inside Visual Studio.
Version 3.5.107, released November 10, 2009
- Fix: Decreased the stack usage by the native stack walker.
Walking the native call stack could cause a stack overflow under certain low stack memory conditions.
- Fix: Avoid using possibly incorrect field information when types are resolved differently in different AppDomains (due to assembly redirection).
- Fix: Information about unreachable finalizable instances could
get lost before they were added to the finalization queue.
This could occur when delayed instance cleanup, real-time collection, and heap utilization was disabled.
Version 3.5.103, released October 29, 2009
- Fix: Updated support for .NET 4.0 Beta 2 and Visual Studio 2010
It is currently not possible to attach to or import memory dumps from 64-bit .NET 4.0 processes. We are investigating this issue and will release a maintenance version as soon as it has been resolved.
- Fix: The workaround for the server GC issue in the previous version
introduced an error when counting total instances in the real-time graph.
This occured when real-time data was collected, with heap utilization tracking disabled.
Version 3.5.100, released October 20, 2009
- Fix: A workaround for a bug in the .NET Runtime has been implemented.
The bug caused could cause the profiler to lose track of large instances (and all their held instances), when the server GC was enabled.
- Fix: The presentation of arrays of nested types did not include the name of the declaring type.
- Fix: A NullReferenceException could occur after a heap comparison, if instances were sorted based on analysis issue.
Version 3.5.98, released October 15, 2009
- New: Static ValueType fields are identified as roots of boxed ValueType fields.
- New: Boxed ValueType instances that are pinned using FixedAddressValueTypeAttribute are identified by the memory analyser.
- Fix: All static fields were not evaluated in some classes (especially related to Managed C++).
- Fix: A race condition could cause an InvalidOperationException when starting a session or collecting a snapshot.
- Fix: Handles exception that occasionally occurs when closing a
The exception caused the profiler to enter a bad state, which required a restart of the profiler.
- Fix: A NullReferenceException was occassionaly thrown during shutdown.
The exception was caused by a race condition in a third party component.
- Fix: Status bar animation in Visual Studio was not stopped when closing a session window.
- Fix: Avoids unhandled exception when profiling applications with corrupt Win32 heaps.
- Fix: Changed load order of DLLs when attaching/importing to avoid
old debug libraries being loaded.
System wide hooks could cause old debug libraries to be loaded, but now the debug libraries are loaded before any hooked DLLs are initialized.
Version 3.5.91, released October 6, 2009
- New: Automatic memory analysis.
- New: Full 64-bit support.
Now the unmanaged resources tracker works for 64-bit processes as well.
- New: Full native call stacks.
- New: Call stack reducer.
- New: AppDomain and thread tracker.
- New: Redesigned presentation of methods.
- New: Support for .NET Framework 4.0.
- New: Support for Visual Studio 2010.
- New: Hierarchical presentation of types and resources in the Types/Resources view.
- New: Instances, allocation stack, and root path synchronization
in the Type and Resource details views.
Whenever the selection is changed in the Type or Resource details view, the corresponding instance, allocation stack, or root path will also be selected.
- New: Referrers in the Instance details view ("Referenced by") are
presented as a tree.
This makes it easier to browse the hierarchy of referrers and provides an alternative way of investigating root paths.
- New: References in the Instance details view are presented as a tree.
- New: References in the Instance details can be filtered to only
include held instances.
Together with the tree presentation of references this makes it easier to browse the hierarchy of instances held by the selected instance.
- Changed: "Size with children" replaced with "Reachable instances", "Reachable bytes", "Held instances", and "Held bytes".
- New: Several new metrics presented for types and type instances.
The new metrics include: "Finalized instances","Delta finalized instances", "New live bytes" (in the Types/Resources view), "Removed live bytes" (in the Types/Resources view), "Unreachable bytes",
- Change: Better customization of columns in tables.
- Change: All available metrics are no longer included by default
in the tables.
Using the improved column customization, it is possible to select which fields should be included in the tables.
- Fix: The call stacks reducer removed too many functions
The call stacks reducer in .NET Memory Profiler 3.5 Beta (v3.5.70) had an error in the call stacks reducer, that caused too many functions to be removed when reducing the stacks.
Version 3.1.343, released May 25, 2009
- Fix: Navigating Back and Forward over snapshots could cause an exception.
- Fix: Improved support for .NET 3.5 SP1
Static fields in generic types where for instance not identified as roots under .NET 3.5 SP1 and there were some issues related to attach and import.
- Fix: Removed a race condition when the runtime performed a GC
- Fix: Fixed a problem with averaging of real-time data (Allocs/sec and Bytes/sec) when too little data was available.
- Fix: Improvements related to presentation of instance fields data.
- Fix: Debug priveleges not correctly initialized on 64-bit machines, which could cause problem when profiling services.
- Fix: Improved identification of the large object heap when attaching to a process or importing memory dumps.
- Fix: A minor error related to code generation for declarative assertions have been fixed.
Version 3.1.321, released January 26, 2009
- Fix: Fixed a problem with identification of some array types when
attaching to .NET 1.x processes (or importing .NET 1.x memory dumps).
This could cause the attacher to crash and the snapshot collection to fail.
- Fix: Registration information entered while running the profiler
under a limited was not available when profiling IIS or other services.
This could cause the profiler to fail to connect to the profiled process.
- Fix: Tries to avoid an error that occurs when initializing Visual Studio integration on some computers.
- Change: The number of resource instances presented under the Resource
details view has been limited.
To avoid slow updates, all instances are not included in the resource list if too many instances exist.
Version 3.1.319, released October 21, 2008
- Fix: The development Web server (WebDev.WebServer.exe) is now correctly located on systems that only have Visual Studio 2008 installed.
- Fix: Message about administrative rights is not shown when profiling ASP.NET, unless they are actually necessary.
- Fix: When profiling WPF Browser application under a 64-bit OS,
the 32-bit version of PresentationHost.exe is used.
The 32-bit version is used to avoid the 64-bit version from launching the 32-bit version, which would prevent the profiler from connecting to the correct process.
- Fix: Avoids additional errors if initialization of the profiler within Visual Studio fails.
Version 3.1.312, released August 21, 2008
- Fix: "Attach to" and import memory dump now support .NET Framework
Due to low-level changes in the runtime, attach to and import no longer worked correctly for .NET 3.5 SP1.
- Fix: Static fields evaluation has been improved for .NET Framework
Also due to the low-level changes in the runtime, static fields evaluation didn't work properly under .NET 3.5 SP1.
- Fix: Fixed a problem where an error message was shown when trying to profile a file-based web from Visual Studio 2008 SP1.
- Fix: Static fields evaluation improved under low impact profiling.
- Change: The fast-filter is taken into consideration when truncating the instances list in the Type details view.
Version 3.1.307, released July 15, 2008
- Fix: Fixed a problem where the usage /p command line argument could
cause the command line information window to be shown, even if the command line
- Fix: Improved identification of Debugging Tools for Windows.
The component identifiers of the debugging tools have changed in the latest release, causing .NET Memory Profiler to not find the installation folder.
- Fix: Corrected a problem with the Browse dialog when selecting the executable to profile.
Version 3.1.301, released June 3, 2008
- Fix: Fixed a problem with ASP.NET profiling using IIS 7.
The profiler failed to fully restart the Web Wide Web Service and could not connect to the ASP.NET process.
- Fix: The total number of undisposed instances could become to high.
An instance could be counted as undisposed when its finalizer ran, even if the instance was not disposable.
- Fix: The resource tracker missed the implicit destruction of an owned HWND when the owner was destroyed.
Version 3.1.297, released May 19, 2008
- Change: The sort order of instances are taken into consideration when truncating the instance list under the Type details view.
- Change: Improved background calculation of "Size (with children)".
The performance of the calculation has been improved, and a progress bar and additional information is presented in the Type details view.
- Change: Improved handling of errors when calculating "Size (with
If an instance references a very big instance graph, the data-structures created during calculation can become quite big. In a low-memory condition, this could cause out of memory problems. This is now handled by showing a message in the Type details view, instead of opening an error window.
- Fix: Fixed an OutOfMemoryException that could sometimes occur when attaching to a process or importing a memory dump.
- Change: It is now possible to import memory dump files from a .NET 1.x process, even if .NET 1.x is not installed on the machine importing the memory dump."
- Fix: Fixed a problem with code injection when using declarative assertions.
- Fix: Removed a potential dead-lock that could occur under certain conditions when the resource tracker was enabled.
- Fix: Fixed a problem when showing source on autogenerated files in Visual Studio.
- Fix: Double-clicking the column header in an instance list would
cause the details of the selected instance to be shown.
This caused problems when trying to autosize the column by double-clicking the header border
- Fix: A race condition that could cause the shortest type root paths calculation to fail under certain conditions has been fixed.
- Fix: Some minor UI-fixes under the Type details and Instance details page.
Version 3.1.283, released March 19, 2008
- Fix: Importing a memory dump or collecting a snapshot from an attached process could fail with the message "Profiling stopped unexpectedly when collecting snapshot".
- Fix: Rename snapshot now works in Visual Studio.
- Fix: A problem with the Launch project property page has been corrected.
- Change: The snapshot dropdown lists are expanded to show the whole name of the snapshot.
Version 3.1.277, released March 6, 2008
- New: It is now possible to specify the virtual path and port when profiling ASP.NET using the development web server (WebDev.WebServer).
- Fix: The virtual path and port settings for filebased web projects in Visual Studio are now correctly used when profiling the ASP.NET application.
- Fix: The profiler now correctly detects when virtual memory associated with thread stacks is released.
Version 3.1.275, released February 27, 2008
- Fix: Fixed a timing error in the dispose tracker that could cause problems in both the profiler and the profiled process.
- Fix: Double-clicking a profiler project in the Explorer now correctly starts profiling using the project settings.
- New: An additional command line option has been added (/resourcetracker, /rt) that controls whether the unmanaged resources tracker is enabled.
Version 3.1.271, released February 8, 2008
- New: Visual Studio style presentation of instance fields
The presentation of fields in the Type instance view now optionally mimics the style of the watch windows in Visual Studio.
- New: Field name presentation in root paths and "Referenced by"
When a a reference to an instance is presented, both the instance number and the name of the referring field is included. This makes is easier to find out how an instance is referenced and why it has not been garbage collected.
- New: "Size with children" is presented for each instance in the Type details view
- New: Improved memory assertions
TypeSetclasses provides much more flexibility in specifying the types to include in the assertion. They also provide new assertions like MaxNewInstances, MaxInstances, MaxNewBytes etc.
- New: Declarative memory assertions
Attributes can be used to declaratively express the expected memory usage of a method.
- New: Visual Studio 2008 integration
- New: Easiers navigation of types, resources, and instances.
- New: WPF Browser Application profiling
- New: GC handle tracking
Information about GC handles are collected and presented. The profiler tracks GC handles created by the runtime itself, or by using the
WeakReferenceclass or the
- New: The "Shortest root paths" in the Type details view can now
be truncated in the middle
This is useful for instance when the root paths of a linked list is being investigated. The start and end of the list is identical, but the number of nodes in between varies. By truncating in the middle, such root paths can be merged.
- New: The Native Memory view makes use of information collected
by the unmanaged resources tracker
More detailed information will be presented in the native memory view if the unmanaged resources tracker is enabled.
- Change: Memory dumps created using a mismatching runtime versions
can be imported
It is now possible to import a memory dump even if the runtime on the machine where the memory dump was created does not match the runtime on the machine running .NET Memory Profiler.
- Change: Type root paths retrieval and other potentially long running calculations are performed in the background
- Fix: Publishing ClickOnce projects to a filepath didn't work correctly if .NET Memory Profiler was running within Visual Studio
- Fix: The dispose tracker didn't correctly detect calls to Dispose if the Dispose methods was a member of a generic class or a boxed valuetype.
Version 3.0.142, released November 22, 2007
- Fix: Fixed a problem with attaching to a process and importing memory dumps on .NET Framework 3.5
- Fix: Fixed a problem that could cause static field identification
to fail when running under .NET Framework 3.5
The problem is caused by an error in the .NET Runtime. When profiling WPF Browser applications on 64-bit systems, it could also cause the profiled application to terminate unexpectedly when identifying static fields.
Version 3.0.141, released August 17, 2007
Fix: Fixed an error that could cause an InvalidCastException or ArgumentException when using the Real-time view.
Fix: An IndexOutOfRangeException could be thrown when using the Native memory view on a process that used zero physical memory pages.
Fix: Shows a normal error message instead of the unhandled exception dialog when the profiler fails to copy data to the clipboard.
Fix: If the Type of an instance cannot be retrieved when collecting a heap snapshot, it will be presented as <Unknown>.
Fix: An error in the algorithm used for tracking a instances could cause an exception while collecting a heap snapshot.
The exception only occurred when at least two snapshots were collected with more than 4 million instances reported.
Fix: Avoids an InvalidOperationException that could occur after a heap snapshot collection has failed.
Fix: Fixed a problem that prevented snapshots from an active session to be compared with other snapshots.
Fix: The Save Snapshot command was not enabled in Visual Studio, even if the snapshots were not automatically saved.
Fix: Some minor UI fixes.
Version 3.0.122, released June 13, 2007
Fix: The top caption of the heap utilization columns was not correctly updated between "Allocs" and "Allocs/sec"
Now the caption is "Allocs/sec" when the "Show Allocs and Bytes per Second" option is enabled and the "Show Heap Utilization as Percent" option is not active.
Fix: The details list of a method (under the Call Stacks/Methods page) could present incorrect numbers for unmanaged resources.
Fix: When the real-time data of more than 1000 types had changed during two delta reports (one second), there was a risk that an InvalidCastException was thrown.
Fix: The info panel for the Type/Resource details page didn't correctly use the "Show Allocs and Bytes per Second" setting.
Version 3.0.119, released June 5, 2007
New: It is now possible to provide interfaces to the MemAssertion methods.
If the Type of an interface is supplied to NoNewInstances, NoNewInstancesExcept etc. then all types implementing the Type will be included in the assertion.
Change: GC.SuppressFinalize is no longer used to indicate a disposed instance.
In previous versions of .NET Memory Profiler, a call to GC.SuppressFinalize was used to detect whether the instance was disposed. Unfortunately this lead to instances being falsely identified as disposed, so this functionality has now been removed.
Fix: When low impact profiling was enabled, the profiled process could crash when instances of certain classes were allocated.
The crash was caused by an invalid class identifier being returned by the runtime for some classes. A workaround for this problem has now been implemented.
Fix: If a single type was provided to NoNewInstancesExcept( Type, ... ), the assertion behaved like the NoNewInstances assertion
Fix: The "Start UI" option didn't work correctly when the memory assertion dialog was shown in non-interactive mode.
The user interface was only started if the memory leak was handled automatically (e.g. no dialog was shown).
Version 3.0.114, released May 15, 2007
Fix: An error that could cause the profiler to crash under Windows 2000 has been corrected.
The error was caused by an access violation in unmanaged code. It could theoretically also occur under another OS than Windows 2000, but the problem has only been seen on Windows 2000.
Version 3.0.113, released May 4, 2007
Fix: The dispose tracker has been modified to fix a problem with profiling a WPF application under 64-bit Vista.
Version 3.0.108, released April 27, 2007
Change: If an unsaved project is unloaded from the Projects Explorer, a Save Project prompt will be shown.
Fix: In rare cases a timing issue could cause the profiler to hang when identifying root referees under .NET 1.1.
Fix: A DirectoryNotFoundException could be thrown if "View->Reset Layout" was clicked before any modified layouts had been saved.
Fix: An InvalidOperationException could be thrown if a new snapshot was collected immediately after another snapshot
Fix: The resource tracker could cause unexpected behavior in the profiled process if multiple versions of the same DLL were loaded side-by-side.
This is temporarily fixed so that only resource instances created by the firstly loaded DLL are tracked. Future releases will make sure that all instances are correctly tracked.
Version 3.0.103, released April 17, 2007
New: The command line argument "/sprj" has been added.
This argument is used to indicate whether the project that was used to start a new session in non-interactive mode should be saved if a new session file is added to it.
New: If the profiler terminates unexpectedly while profiling, a dialog will be shown at the next startup, allowing the user to save any unsaved profiler sessions.
Change: The progress dialog is shown when saving session files
Fix: Fixed a threading issue that could cause problems when saving sessions while still profiling.
Fix: A memory leak could occur under certain circumstances, especially when running the profiler under Visual Studio.
Fix: The type call stacks were not correctly updated when the compared snapshots changed, without changing the selected type.
Fix: The Start Memory Profiler command didn't work on ASP.NET projects in Visual Studio.NET 2003.
A message stating that ASP.NET was already being profiled was shown, and profiling could not be started.
Fix: The Start Memory Profiler command was not initially shown in the context menu in the solution explorer in Visual Studio
Visual Studio delay loads packages, and the context menu command was not added until the profiler package was actually loaded.
Fix: Session file settings and memory leak settings were not correctly updated when using session or project property pages in Visual Studio.
Version 3.0.97, released April 3, 2007
Fix: The resource tracker could cause a dead-lock in the profiled process under certain circumstances.
This problem appeared under high-stress conditions when a lot of GCs were taking place, and it has now been resolved.
Fix: Generic classes were not were not unloaded correctly when a application domain was unloaded, which could cause problems when collecting heap snapshots.
Fix: When attaching to a process, or importing a memory dump file, that has several versions if the same assembly loaded could cause the snapshot collection to fail.
Fix: A NullReferenceException could occur when auto-collecting heap snapshots.
The exception occurred if older snapshots were being investigated when the auto-collected snapshot was initiated.
Fix: A StackOverflowException could occur when viewing the details of an instance that was part of a very large instance graph.
Fix: When making memory assertions using the .NET Memory Profiler API, the Types were not correctly identified if the module name was not the same as the assembly name.
This could for example happen when the assertion was made on a COM wrapper class.
Fix: Slightly improved performance when attaching to a process or importing memory dump files.
Version 3.0.89, released March 6, 2007
Fix: A race condition could occur when a GC was performed while a thread was being destroyed.
The race condition only occurred when the resource tracker was enabled, and could cause the profiled process to terminate unexpectedly.
Fix: The performance of the stack-tracer was significantly reduced due to an optimization that was never used.
This has now been corrected and the performance of the profiler should be the same as the previous version.
Fix: Fixed a bug that could cause the profiled process to crash if many threads were created.
Fix: The maximum number of software triggered snapshots didn't affect the automatic collection of snapshots.
Now no automatic snapshots will be collected if the maximum number of software triggered snapshots has been reached.
Fix: Selecting the instance drop down list could cause a NullReferenceException if the previously selected instance did not exist in a new snapshot.
Fix: A NullReferenceException was sometimes thrown when attaching to a process or importing a memory dump files, after having added Type plots in the real-time view.
Version 3.0.86, released February 27, 2007
New: The full path of projects and session files are shown as tool-tips in the Profiler Projects Explorer
Change: When saving a project under a new name (Save Project As), the current project name is provided as a default name
Fix: Instance data size is correctly initialized for snapshots that have not been saved
Fix: When running non-interactively the saved session file was not always correctly flushed
Change: Some additional minor changes in logging
Version 3.0.83, released February 22, 2007
Change: Minor changes in error reporting and logging
Version 3.0.78, released February 16, 2007
New! Unmanaged resource tracker
Collects and presents information about unmanaged resources allocations.
New! Attach to process
Allows the profiler to attach to an already running .NET process.
New! Import memory dump files
Allows memory information from a memory dump file to be imported as a heap snapshot.
New! Profiler projects
Allows you to define session settings in a project, and to keep track of session files related to a session.
New! 64-bit support
Support for 64-bit .NET processes and 64-bit OS.
New! Documentation is included in the MSDN help collection
New! Automatically collect snapshots at defined intervals.
New! Use wildcards when performing memory assertions
Wildcards make it possible to assert on a namespace rather than a specific type.
Change: No prompt for terminating the process or restarting services
The profiled process will always be terminated when profiling is stopped.
Change: Session files can be automatically saved or discarded even when running interactively
This gives the possibility to avoid the "Save session" prompt.
Change: Improved UI in the snapshots view
Change: Improved filtering for tabular data