C# 文本框。WPF应用程序中的文本泄漏内存

C# 文本框。WPF应用程序中的文本泄漏内存,c#,wpf,memory-leaks,textbox,C#,Wpf,Memory Leaks,Textbox,我有一个应用程序,它对一组数字进行大量的数字运算。我将其设置为每100000次操作显示这些数字的状态。这只是一种视觉指示器,告诉操作员应用程序仍在处理中,距离完成还有多远 运行应用程序几个小时后,它会因OutOfMemoryExection崩溃。我在上面运行了CLRProfiler,发现泄漏发生在显示数组当前状态的文本框中。。。应用程序在Char[]中构建~4K,每当接口更新时,每个挂起内存位的堆栈跟踪都是相同的 这是WPF中的一个bug,还是我不知道应该做些什么来防止这种情况发生?我没有看到任

我有一个应用程序,它对一组数字进行大量的数字运算。我将其设置为每100000次操作显示这些数字的状态。这只是一种视觉指示器,告诉操作员应用程序仍在处理中,距离完成还有多远

运行应用程序几个小时后,它会因OutOfMemoryExection崩溃。我在上面运行了CLRProfiler,发现泄漏发生在显示数组当前状态的文本框中。。。应用程序在Char[]中构建~4K,每当接口更新时,每个挂起内存位的堆栈跟踪都是相同的

这是WPF中的一个bug,还是我不知道应该做些什么来防止这种情况发生?我没有看到任何其他关于这方面的参考资料。由于这是一个相当处理器密集型的操作,如果我不必只显示阵列的当前状态,我宁愿不必销毁和重建文本框

这是我能找到的唯一内存泄漏,但由于所需操作的数量太多,这实际上是应用程序的一个大问题,即使我只是简单地降低了接口更新的频率。如果您需要更多信息,我将尽可能提供帮助,但请理解,由于此应用程序的功能,我几乎无法发布任何源代码,并且我将不得不匿名发布我可以发布的任何内容(删除应用程序用途的任何指示)

当运行CLR探查器时(这会大大降低性能),以下相同的跟踪每2秒发生一次(请记住:100000次操作),并且永远不会释放内存。当它在未连接探查器的情况下运行时,更新之间的时间间隔小于1秒

一次更新(“谁分配的”)的跟踪是:

:3.7KB(100.00%)
WpfApplication0.App::Main static void():3.7KB(100.00%)
System.Windows.Application::Run int32():3.7KB(100.00%)
System.Windows.Application::运行int32(System.Windows.Window):3.7KB(100.00%)
System.Windows.Application::RunInternal int32(System.Windows.Window):3.7KB(100.00%)
System.Windows.Application::RunDispatcher对象(对象):3.7KB(100.00%)
System.Windows.Threading.Dispatcher::runstaticvoid():3.7KB(100.00%)
System.Windows.Threading.Dispatcher::PushFrame静态无效(System.Windows.Threading.DispatcherFrame):3.7KB(100.00%)
System.Windows.Threading.Dispatcher::PushFrameImpl void(System.Windows.Threading.DispatcherFrame):3.7KB(100.00%)
本机函数(未知参数):3.7KB(100.00%)
MS.Win32.HwndSubclass::SubclassWndProc int_ptr(int_ptr int32 int_ptr int_ptr):3.7KB(100.00%)
System.Windows.Threading.Dispatcher::Invoke对象(System.Windows.Threading.DispatcherPriority对象):3.7KB(100.00%)
System.Windows.Threading.Dispatcher::InvokeImpl对象(System.Windows.Threading.DispatcherPriority对象bool):3.7KB(100.00%)
System.Windows.Threading.Dispatcher::WrappedInvoke对象(对象布尔):3.7KB(100.00%)
System.Windows.Threading.ExceptionWrapper::TryCatchWhen对象(对象bool):3.7KB(100.00%)
System.Windows.Threading.ExceptionWrapper::InternalRealCall对象(对象布尔):3.7KB(100.00%)
MS.Win32.HwndSubclass::DispatcherCallbackOperation对象(对象):3.7KB(100.00%)
WndProc int_ptr(int_ptr int32 int_ptr int_ptr bool&):3.7KB(100.00%)
System.Windows.Threading.Dispatcher::WndProcHook int_ptr(int_ptr int32 int_ptr int_ptr bool&):3.7KB(100.00%)
System.Windows.Threading.Dispatcher::ProcessQueue void():3.7KB(100.00%)
System.Windows.Threading.DispatcherOperation::Invoke对象():3.7KB(100.00%)
System.Threading.ExecutionContext::运行静态void(System.Threading.ExecutionContext System.Threading.ContextCallback对象):3.7KB(100.00%)
System.Threading.ExecutionContext::RunInternal静态无效(System.Threading.ExecutionContext System.Threading.ContextCallback对象):3.7KB(100.00%)
System.Threading.ExecutionContext::runTryCode静态无效(对象):3.7KB(100.00%)
System.Windows.Threading.DispatcherOperation::InvokeInSecurityContext静态无效(对象):3.7KB(100.00%)
System.Windows.Threading.DispatcherOperation::InvokeImpl void():3.7KB(100.00%)
System.Windows.Threading.Dispatcher::WrappedInvoke(1)对象(对象布尔):3.7KB(100.00%)
System.Windows.Threading.ExceptionWrapper::TryCatchWhen(1)对象(对象bool):3.7KB(100.00%)
System.Windows.Threading.ExceptionWrapper::InternalRealCall(1)对象(对象bool):3.7KB(100.00%)
System.Delegate::DynamicInvokeImpl对象(对象[]):3.7KB(100.00%)
System.Reflection.RuntimeMethodInfo::Invoke对象(对象System.Reflection.BindingFlags System.Reflection.Binder对象[]System.Globalization.CultureInfo bool):3.7KB(100.00%)
System.RuntimeMethodHandle::InvokeMethodFast对象(对象对象[]System.Signature System.Reflection.MethodAttributes System.RuntimeTypeHandle):3.7 kB(100.00%)
WpfApplication0.Window1::UpdateUI void():3.7KB(100.00%)
System.Windows.Controls.TextBox::set_文本无效(字符串):3.7KB(100.00%)
System.Windows.DependencyObject::SetValue void(System.Windows.DependencyProperty对象):3.7 kB
<root> :  3.7 kB    (100.00%)
 WpfApplication0.App::Main static void ():  3.7 kB    (100.00%)
  System.Windows.Application::Run int32 ():  3.7 kB    (100.00%)
   System.Windows.Application::Run int32 (System.Windows.Window):  3.7 kB    (100.00%)
    System.Windows.Application::RunInternal int32 (System.Windows.Window):  3.7 kB    (100.00%)
     System.Windows.Application::RunDispatcher Object (Object):  3.7 kB    (100.00%)
      System.Windows.Threading.Dispatcher::Run static void ():  3.7 kB    (100.00%)
       System.Windows.Threading.Dispatcher::PushFrame static void (System.Windows.Threading.DispatcherFrame):  3.7 kB    (100.00%)
        System.Windows.Threading.Dispatcher::PushFrameImpl void (System.Windows.Threading.DispatcherFrame):  3.7 kB    (100.00%)
         NATIVE FUNCTION ( UNKNOWN ARGUMENTS ):  3.7 kB    (100.00%)
          MS.Win32.HwndSubclass::SubclassWndProc int_ptr (int_ptr int32 int_ptr int_ptr):  3.7 kB    (100.00%)
           System.Windows.Threading.Dispatcher::Invoke Object (System.Windows.Threading.DispatcherPriority  Object):  3.7 kB    (100.00%)
            System.Windows.Threading.Dispatcher::InvokeImpl Object (System.Windows.Threading.DispatcherPriority   Object bool):  3.7 kB    (100.00%)
             System.Windows.Threading.Dispatcher::WrappedInvoke Object ( Object bool ):  3.7 kB    (100.00%)
              System.Windows.Threading.ExceptionWrapper::TryCatchWhen Object (Object  Object bool ):  3.7 kB    (100.00%)
               System.Windows.Threading.ExceptionWrapper::InternalRealCall Object ( Object bool):  3.7 kB    (100.00%)
                MS.Win32.HwndSubclass::DispatcherCallbackOperation Object (Object):  3.7 kB    (100.00%)
                 MS.Win32.HwndWrapper::WndProc int_ptr (int_ptr int32 int_ptr int_ptr bool&):  3.7 kB    (100.00%)
                  System.Windows.Threading.Dispatcher::WndProcHook int_ptr (int_ptr int32 int_ptr int_ptr bool&):  3.7 kB    (100.00%)
                   System.Windows.Threading.Dispatcher::ProcessQueue void ():  3.7 kB    (100.00%)
                    System.Windows.Threading.DispatcherOperation::Invoke Object ():  3.7 kB    (100.00%)
                     System.Threading.ExecutionContext::Run static void (System.Threading.ExecutionContext System.Threading.ContextCallback Object):  3.7 kB    (100.00%)
                      System.Threading.ExecutionContext::RunInternal static void (System.Threading.ExecutionContext System.Threading.ContextCallback Object):  3.7 kB    (100.00%)
                       System.Threading.ExecutionContext::runTryCode static void (Object):  3.7 kB    (100.00%)
                        System.Windows.Threading.DispatcherOperation::InvokeInSecurityContext static void (Object):  3.7 kB    (100.00%)
                         System.Windows.Threading.DispatcherOperation::InvokeImpl void ():  3.7 kB    (100.00%)
                          System.Windows.Threading.Dispatcher::WrappedInvoke(1) Object ( Object bool ):  3.7 kB    (100.00%)
                           System.Windows.Threading.ExceptionWrapper::TryCatchWhen(1) Object (Object  Object bool ):  3.7 kB    (100.00%)
                            System.Windows.Threading.ExceptionWrapper::InternalRealCall(1) Object ( Object bool):  3.7 kB    (100.00%)
                             System.Delegate::DynamicInvokeImpl Object (Object[]):  3.7 kB    (100.00%)
                              System.Reflection.RuntimeMethodInfo::Invoke Object (Object System.Reflection.BindingFlags System.Reflection.Binder Object[] System.Globalization.CultureInfo bool):  3.7 kB    (100.00%)
                               System.RuntimeMethodHandle::InvokeMethodFast Object (Object Object[] System.Signature System.Reflection.MethodAttributes System.RuntimeTypeHandle):  3.7 kB    (100.00%)
                                WpfApplication0.Window1::UpdateUI void ():  3.7 kB    (100.00%)
                                 System.Windows.Controls.TextBox::set_Text void (String):  3.7 kB    (100.00%)
                                  System.Windows.DependencyObject::SetValue void (System.Windows.DependencyProperty Object):  3.7 kB    (100.00%)
                                   System.Windows.DependencyObject::SetValueCommon void (System.Windows.DependencyProperty Object System.Windows.PropertyMetadata bool System.Windows.OperationType bool):  3.7 kB    (100.00%)
                                    System.Windows.DependencyObject::UpdateEffectiveValue System.Windows.UpdateResult (System.Windows.EntryIndex System.Windows.DependencyProperty System.Windows.PropertyMetadata System.Windows.EffectiveValueEntry System.Windows.EffectiveValueEntry& bool System.Windows.OperationType):  3.7 kB    (100.00%)
                                     System.Windows.DependencyObject::NotifyPropertyChange void (System.Windows.DependencyPropertyChangedEventArgs):  3.7 kB    (100.00%)
                                      System.Windows.Controls.TextBox::OnPropertyChanged void ():  3.7 kB    (100.00%)
                                       System.Windows.FrameworkElement::OnPropertyChanged void ():  3.7 kB    (100.00%)
                                        System.Windows.DependencyObject::OnPropertyChanged void (System.Windows.DependencyPropertyChangedEventArgs):  3.7 kB    (100.00%)
                                         System.Windows.Controls.TextBox::OnTextPropertyChanged static void ( ):  3.7 kB    (100.00%)
                                          System.Windows.Documents.TextContainer::DeleteContentInternal void (System.Windows.Documents.TextPointer System.Windows.Documents.TextPointer):  3.7 kB    (100.00%)
                                           System.Windows.Documents.TextTreeUndo::CreateDeleteContentUndoUnit static System.Windows.Documents.TextTreeDeleteContentUndoUnit (System.Windows.Documents.TextContainer System.Windows.Documents.TextPointer System.Windows.Documents.TextPointer):  3.7 kB    (100.00%)
                                            System.Windows.Documents.TextTreeDeleteContentUndoUnit::.ctor void (System.Windows.Documents.TextContainer System.Windows.Documents.TextPointer System.Windows.Documents.TextPointer):  3.7 kB    (100.00%)
                                             System.Windows.Documents.TextTreeDeleteContentUndoUnit::CopyContent ContentContainer (System.Windows.Documents.TextTreeNode System.Windows.Documents.TextTreeNode):  3.7 kB    (100.00%)
                                              System.Windows.Documents.TextTreeDeleteContentUndoUnit::CopyTextNode System.Windows.Documents.TextTreeNode (System.Windows.Documents.TextTreeTextNode System.Windows.Documents.TextTreeNode ContentContainer&):  3.7 kB    (100.00%)
                                               System.Char [] :  3.7 kB    (100.00%)
        List<int> arraystatus = new List<int>(displayarray.ToArray());

        StringBuilder s = new StringBuilder();

        int i = 1;

        foreach (int item in arraystatus)
        {
            s.Append(i.ToString() + ":\t" + item.ToString() + (i % 8 == 0 ? "\n" : "\t"));
            i++;
        }

        txtStatus.Text = s.ToString();

        arraystatus = null;
        s = null;
s.Append(i.ToString());
s.Append(":\t");
s.Append(item.ToString());
s.Append(i % 8 == 0 ? "\n" : "\t"));