c# - WPF多个控件OutOfMemory

标签 c# wpf memory user-controls out-of-memory

我自己做了一个控件来“伪造”一个细节网格。每一行都是一个控件,这意味着我需要很多。我正在尝试将它们存储在位于 ScrollViewer 中的 StackPanel 中。

当我添加一个控件时,我的可执行文件的内存使用量上升了 10mb。当我尝试使用它绘制所有 110 个数据包时,它上升到 1.5GB 并抛出 OutOfMemory 异常。

控件非常简约。没有执行,只有几个标签、一些矢量图形、一个扩展器和一组 3 个以上的控件(只有多个标签)。

我该如何解决这个问题?

最佳答案

作为快速修复,您可以尝试这段代码,它会立即释放内存

 /// <summary>
    /// Memory Management
    /// </summary>
    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);
    }

关于c# - WPF多个控件OutOfMemory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31269181/

相关文章:

python - 有没有办法避免这种内存错误?

c# - Visual Studio 设计器不显示嵌入式字体

c#如何在字节数组中连续查找字节数组?

c# - 为什么 VS 2015 停止诊断 session 会永远持续下去?

wpf - 是否可以在 WPF Net 6 应用程序中使用 FolderBrowserDialog?

c# - 如何使用具有自己入口点的 App.Xaml 的 ResourceDictionaries

c# - 读取 AppFabric 内容会引发程序集异常

c# - 向数组添加元素

C++ 函数返回引用和内存

python - Python 内存优化是如何工作的?