2015-07-17 4 views
0

Я разработал в C#. После периода, который я использовал WindowsForms, я переключаюсь на WPF. По прошествии времени я понял, что моему приложению требуется больше времени, чтобы сократить потребление памяти после выполнения высокого процесса. С WinForms у меня не было проблем с этим. Поэтому я проанализировал его с помощью профилировщика памяти, и я обнаружил, что wpfgfx_v0400.dll зарезервировал много памяти, и после этого он не уменьшился. Итак, вопрос в том, какова функция этой библиотеки. Я знаю, что это родная библиотека WPf и в контексте графического рендеринга, но в которой специальные элементы управления wpf или object будут называться этой библиотекой?Потребление памяти wpfgfx_v0400.dll

ответ

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 где вы встретили утечку памяти.

+0

Ничего себе он отлично работает. Какие опасные аспекты могут произойти, когда я использовал очень короткие расстояния? – Lutze

+0

Если это сработало ..пожалуйста, отметьте это как ответ :-). Вы можете выполнить поиск в SetProcessWorkingSetSize –

+0

Когда я его прочитал, единственная вещь, с которой происходит, заключается в том, чтобы сохранить ее на диске. По прошествии времени анализа я вижу, что проблема заключается не в памяти вообще моего собственного кода. Я использую сторонний элемент управления (управление wpf в ядре с использованием C+++), когда я работаю с ним, потребление памяти растет, и когда я распоряжаюсь элементом управления, потребление памяти не падает. Поэтому вопрос в том, что функция действительно хорошая, потому что может случиться так, что функция будет вызывать очень часто. – Lutze

Смежные вопросы