我是用c#开发的。在我使用WindowsForms的一段时间后,我切换到WPF。经过一段时间的开发,我意识到我的应用程序需要更多的时间来减少运行高进程后的内存消耗。使用WinForms我没有问题。所以我用内存分析器分析了它,我发现wpfgfx_v0400.dll保留了很多内存,之后它没有减少。所以问题是这个库的功能是什么。我知道这是一个原生的WPf库,在图形渲染的上下文中,但是对wpf或对象的特殊控制会被称为这个库吗?
答案 0 :(得分:2)
作为快速修复,您可以使用此方法来清除内存泄漏
public class MemoryManagement
{
/// <summary>
/// Clear un wanted memory
/// </summary>
public static void FlushMemory()
{
try
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
catch (Exception e)
{
}
}
/// <summary>
/// set process working size
/// </summary>
/// <param name="process">Gets process</param>
/// <param name="minimumWorkingSetSize">Gets minimum working size</param>
/// <param name="maximumWorkingSetSize">Gets maximum working size</param>
/// <returns>Returns value</returns>
[DllImportAttribute("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet =
CharSet.Ansi, SetLastError = true)]
private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize);
}
将此类添加到您的应用程序中,并调用FlushMemory方法,在那里遇到内存泄漏。