Потребление памяти 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, где вы столкнулись с утечкой памяти.

Другие вопросы по тегам