How to find native memory leak in .net application? - c#

I have application written in C#. Memory usage shows that there is a memory leak. However, dotTrace shows that managed memory is OK, so I think that leak occurs in native memory (yes, there are some native calls in my application). How can I find the problem?
Thanks!

I would take a memory dump of the running application, and then use Windbg or Visual Studio 2010 to investigate the issue.
Related resources:
How to research unmanaged memory leaks in .NET?
Windbg on Wikipedia
Analysing dump files with Visual Studio 2010

Related

Can I profile memory allocated in external dll in C# (e.g. with Visual Studio)

Is there a way to profile memory allocated in an external DLL, in my case the SysAllocString function?
The DLL is compiled from Delphi and I have control over both the Delphi and C# code if instrumentation needs to be written.
In the overview of the Visual Studio memory profiler it says the Windows SDK has been annotated to emit ETW event data which is tracked by the profiler. However I've been unable to confidently confirm if the DLL's SysAllocString memory is tracked in it.

c# visual studio 2017 CPU profiling out of memory exception

I've got a long running c# application that I'm profiling in visual studio 2017 community edition. Runs for about 2/3 hours before I stop the profiling (and application) to see the CPU usage. However I can see when its building the reports the memory usage increases by 3GB then throws an out of memory exception.
Profiling started.
Profiling process ID 7312 (test).
Starting data collection. The output file is C:\Users\jamie\Source\Repos\test(1).vspx
Profiler stopping.
Stopping data collection.
Merging collection data. Please wait...
Data is saved in file C:\Users\jamie\Source\Repos\test(1).vspx
Profiling finished.
Exception of type 'System.OutOfMemoryException' was thrown.
Is there anything I can do to fix this or do I just have to get more memory?
Oddly the total memory usage on my machine is around 65% when it throws this so its not even using all my memory to build the profiling reports.
This is a fresh install of VS and its got all the default settings.

Unable to launch UWP Application using .Net Memory Profiler

I want to see my UWP Application performance and Memory Leakage using .Net Memory Profiler. When I am trying to launch my application I am getting below error.
May I know how to run my application using .Net Memory Profiler.
This may not be an answer to why .NET memory profiler does not work with UWP, but here is an alternative.
Visual Studio 2015 and above come in-built with visual diagnostic tools that let you quickly identify memory and performance related issues. Take a look at Tools for profiling and performance

WPF RenderTargetBitmap memory leak

I have a problem with memory leak in RenderTargetBitmap function.
Function runs many times. Memory is not released, and at some point there is an overflow.
I tried to free the memory with the help of GC.Collect(). I use:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
But it does not work. I've read that this is a problem with Net.Framework and the problem has disappeared with version 4.5.2. When compiling the new version of the framework remained a problem.
I have two PC with Windows 10 and Visual Studio 2013, where i can compiling my application. Once, on one of the computers memory leak was not, but after the restart it appeared again.

Analyzing memory dump to find leak

We have a c# .NET application that has a memory leak in it. I used procdump to get a memory dump from a running instance of the application from a production machine. The production machine is running 32 bit Windows XP, and .NET 4.0.
The exe config is set to .net 4.0
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
When I pull the dump to my dev box, windows 8.1 64bit, and open it with VS 2013 the dump is initially opened fine. However, when I click the Debug Managed Memory action I get the following error message:
Memory analysis is not supported for the CLR version used in this process.
I'm new to troubleshooting memory leaks in Windows and managed memory environments, and know next to nothing about the tools involved. I did a google search for the error I get, and didn't find anything. Any help is appreciated. I apologize if I am missing something obvious - Junior Dev here :-)
I don't know if procdump can be used to find a memory leak in .NET. One effective way I tried is: using Windbg and SOS. There are two posts explains how to use Windbg+ SOS to track .NET memory leaks:
Where's your leak at? [Using WinDbg, SOS, and GCRoot to diagnose a .NET memory leak]
Debugging managed code memory leak with memory dump using windbg
If you don't like Windbg, the tool DebugDiag is also very effective tool in tracking down memory leaks.
See this link, it only works on process running under .Net 4.5
Before I begin, there are a few things to note about the "Debug
Managed Memory" feature discussed in this post:
The option will only be available from the dump summary page in the
Ultimate version of Visual Studio 2013. If you are using Premium or
Professional you will not see the option
The process the dump file was collected against must have been running on .NET 4.5 or higher. If the dump was collected on 3.5 or
previous the option will not appear, if it was collected on 4.0 it
will fail to launch with an error message.
Starting with Windows 7 /Server 2008 R2 there is a way to create a clone of a process and create a dump of this clone so that the process you care about doesn't need to be suspended. Use procdump -r to use this feature when capturing a dump.
You can also use capture a ETW trace and analyze the data with PerfView.
https://superuser.com/questions/846079/how-can-i-create-a-memory-dump-of-a-production-system-without-affecting-performa/846156#846156

Categories