none
向大家请教一个释放内存的问题 RRS feed

  • 问题

  • 项目大致框架是 左边是导航栏,右边是tabcontrol,

    导航栏每个节点都是存储了一个路径,然后当点击某节点时,就会利用反射指向一个usercontrol类,并附加进tabcontrol里面。
    不知道这种设计方式好不好,希望大家能够提供一点建议关于这种左边导航栏,右边tabcontrol的设计方式

    现在问题是:当关闭tabitem时,内存并没有减少,不知道如何当关闭tabitem时,释放该tabitem所关联的所有对象!


    ^_^

    2014年6月21日 4:44

答案

全部回复

  • 你好,

    如果关闭当前Tab Item,我会把Tab Item所对应的DataContext设置为Null。这样可以释放Tab Item所关联的对象。因为WPF的控件本身不会自动释放内存,所以建议采用这种方式来释放。

    具体信息,请参考:

    http://stackoverflow.com/questions/10438232/customizing-tabitem-closeable-tab-and-release-memory-on-close

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年6月23日 3:36
    版主
  • 项目没有采用mvvm,tabitem里的关闭按钮事件如下:

    已经设置了datacontext=null

    private void DelTabItem_Click(object sender, RoutedEventArgs e)
        {
            e.Handled = true;
            if (this.MainPanel.SelectedIndex == 0) return;
            var c = this.MainPanel.SelectedContent;
            if (c is Extention.ISysOpBase && !(c as Extention.ISysOpBase).IsAlreadySave())
            {            
                if (MessageBox.Show("系统检测到你有数据尚未保存,要保存吗?", "提示", MessageBoxButton.YesNoCancel, MessageBoxImage.Warning) != MessageBoxResult.No)
                    return;
            }
            (MainPanel.Items[MainPanel.SelectedIndex] as TabItem).DataContext = null;
            MainPanel.Items.RemoveAt(MainPanel.SelectedIndex);
            if (c is IDisposable)
                (c as IDisposable).Dispose();
        }


    ^_^

    2014年6月23日 4:38
  • 你好,

    在最后你再调用一下 GC.Collect()方法。

    http://msdn.microsoft.com/zh-cn/library/xe0c2357(v=vs.110).aspx

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年6月23日 5:29
    版主
  • 您好,经测试,

    系统xp sp3和winserver2012能起作用,其中作用最明显的是server2012系统,基本上每关闭一个tabitem内存就会相应的减少。

    但是win7系统(没打sp1),没有任何反应,即时软件仅剩下一个tabitem,并且过了一段时间,内存也没有降下来!


    ^_^

    2014年6月23日 9:02
  • 请问有没有一些方便的内存察看工具,可以方便查到呢?

    ^_^

    2014年6月23日 9:49
  • 你好,

    请参考:http://msdn.microsoft.com/zh-cn/library/aa969767(v=vs.110).aspx

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年6月23日 9:52
    版主