【问题标题】:Memory consumption of wpfgfx_v0400.dllwpfgfx_v0400.dll的内存消耗
【发布时间】:2015-07-17 07:52:07
【问题描述】:

我用 C# 开发。在使用 WindowsForms 一段时间后,我切换到 WPF。经过一段时间的开发,我意识到我的应用程序在运行高进程后需要更多时间来减少内存消耗。使用 WinForms 我没有问题。所以我用内存分析器分析它,我发现 wpfgfx_v0400.dll 保留了很多内存,之后它没有减少。所以问题是这个库的功能是什么。我知道这是一个原生 WPf 库,并且在图形渲染的上下文中,但是在哪个 wpf 或对象的特殊控件将被称为这个库?

【问题讨论】:

    标签: c# wpf memory graphic memory-consumption


    【解决方案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 方法。

    【讨论】:

    • 哇,效果很好。当我在很短的距离内使用非常的时候会发生什么样的危险方面?
    • 如果有效..请将其标记为答案:-)。您可以搜索 SetProcessWorkingSetSize
    • 当我阅读它时,该功能唯一发生的事情就是将其保存到光盘上。经过一段时间的分析,我发现问题通常不是我自己的代码的内存。我使用第三方控件(使用 c++++ 的核心中的 wpf 控件),当我使用它时,内存消耗会增加,而当我处理控件时,内存消耗不会下降。所以问题是该函数是否真的是一个好方法,因为它可能会经常调用该函数。
    • 我定期使用此功能。我还没有遇到任何类型的错误。
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 2010-10-27
    • 2011-12-13
    • 2011-10-03
    • 2012-11-24
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多