Потребление памяти wpfgfx_v0400.dll
Я разработал в C#. После периода, который я использовал WindowsForms, я переключаюсь на WPF. После некоторого времени разработки я понял, что моему приложению нужно больше времени, чтобы уменьшить потребление памяти после выполнения высокого процесса. С WinForms у меня не было проблем с этим. Поэтому я проанализировал его с помощью профилировщика памяти и обнаружил, что wpfgfx_v0400.dll зарезервировал много памяти и после этого не уменьшил. Поэтому вопрос в том, какова функция этой библиотеки. Я знаю, что это нативная библиотека WPf и в контексте графического рендеринга, но в каких конкретно средствах управления wpf или объект будет называться этой библиотекой?
1 ответ
В качестве быстрого решения вы можете использовать этот метод для устранения утечки памяти
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, где вы столкнулись с утечкой памяти.