Parsing Memory Profile logs (.prfsession)

Use this forum for questions on how to use .NET Memory Profiler and how to analyse memory usage.
Post Reply
gvprashanth
Posts: 1
Joined: Thu Mar 13, 2014 8:46 am

Parsing Memory Profile logs (.prfsession)

Post by gvprashanth » Thu Mar 13, 2014 8:48 am

Hi,

We have automated the memory leak tests, bu we are not able to parse the .prfsession files automatically and send the report.

Please help us in doing the same.

Thanks,
Prashanth

Andreas Suurkuusk
Posts: 1005
Joined: Wed Mar 02, 2005 7:53 pm

Re: Parsing Memory Profile logs (.prfsession)

Post by Andreas Suurkuusk » Fri Mar 14, 2014 7:36 am

To retrieve data from a session file you need to use the external profiler API. You get access to this API by using the SciTech.NetMemProfiler.Core assembly, which can be found in the "C:\Program files\SciTech\NetMemProfiler4\Assemblies" folder. This API is still not officially documented, but contrary to what is written in another forum post, it is supported. If you need help using the API, you can post a question on this forum (preferred) or send an e-mail to support@scitech.se. If you use this API, you should be aware that this is the same API that the profiler itself uses, and there may be incompatible changes in later versions (even though we try to avoid it as much as possible).

The code below shows a small example on how you can open a session file and retrieve the compared types.

Code: Select all

using SciTech.Profiler;
using SciTech.Profiler.Memory;
using System;

class Program
{
    static void Main(string[] args)
    {
        ProfilerApplicationCore application = new ProfilerApplicationCore();

        // Load the session.
        using (ProfilerSession session = application.LoadSession(@"<path to session>"))
        {
            // Retrieve the available snapshots.
            SnapshotHeader[] snapshots = session.SessionFile.GetSnapshotHeaders();

            // Select snapshots. Currently the last two are selected (assuming that
            // at least two snapshots exist)
            SnapshotHeader selectedSnapshot = snapshots[snapshots.Length - 1];
            SnapshotHeader comparisonSnapshot = snapshots[snapshots.Length - 2];

            using (ProfilerComparison comparison = application.CompareSnapshots(
               selectedSnapshot, comparisonSnapshot))
            {
                // Get the compared types from the comparison (if the resource tracker was enabled,
                // GetComparedResources can also be used)
                ComparedTypeInfo[] comparedTypes = comparison.GetComparedTypes();

                // Process the compared types
                // ...
            }
        }
    }
}
More examples on how to use the API can be found in the following forum posts:

http://forum.memprofiler.com/viewtopic.php?f=2&t=4299
http://forum.memprofiler.com/viewtopic.php?f=2&t=3888
http://forum.memprofiler.com/viewtopic.php?f=2&t=1435
http://forum.memprofiler.com/viewtopic.php?f=3&t=1317
Best regards,

Andreas Suurkuusk
SciTech Software AB

Post Reply

Who is online

Users browsing this forum: No registered users and 5 guests