找回密码
 立即注册

QQ登录

只需一步,快速开始

子曰

中级会员

16

主题

45

帖子

670

积分

中级会员

积分
670

活字格认证

子曰
中级会员   /  发表于:2015-12-24 16:03  /   查看:6083  /  回复:7
请问关闭窗口时怎么析构chart资源?每次打开一个新窗口都会让内存不断上升,有什么解决方法?
demo在附件中。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-12-24 17:29:00
沙发
回复 1楼子曰的帖子

谢谢您提供的Demo。
我们需要针对您的Demo进行测试,测试后给您反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-25 14:57:00
板凳
回复 1楼子曰的帖子

非常谢谢您的反馈。
经过测试,WPF平台下有内存泄露的情况发生。
我会将此问题提交到产品组,如果有任何反馈会在第一时间通知您。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
子曰
中级会员   /  发表于:2015-12-25 15:48:00
地板
回复 3楼Alice的帖子

好的,我们这边也挺急的,希望你们能快点。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-12-25 17:06:00
5#
回复 4楼子曰的帖子

我们已经提交到产品组,如果确认是bug会修复,或是提供相应的方案,我们都会尽快给您反馈。
很抱歉给您带来的不便。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
gw0506
超级版主   /  发表于:2015-12-29 09:51:00
6#
这不是C1控件的问题,这是.NET机制。比如在window上只放一个MS button,如上操作,情况一样。GC不会再窗口关闭后立即回收。
另外,vshost进程会包含一些debug信息,所以它保留了部分对象,也是无法立即回收的原因。
不过我们提供了一段代码,可以优化这个问题,功能参考
  1. public partial class WindowChart : Window, IDisposable
  2.     {
  3.         public WindowChart()
  4.         {
  5.             InitializeComponent();
  6.             //Chart.Data.Children.Add(new XYDataSeries
  7.             //{
  8.             //    RenderMode = RenderMode.Default,
  9.             //    XValuesSource = ReviewCpetParas.GetInstance().Time,
  10.             //    ValuesSource = ReviewCpetParas.GetInstance().Volume,
  11.             //    ConnectionStrokeThickness = 2,
  12.             //    ConnectionStroke = new SolidColorBrush(Colors.Red),
  13.             //});
  14.             //Chart2.Data.Children.Add(new XYDataSeries
  15.             //{
  16.             //    RenderMode = RenderMode.Default,
  17.            //    XValuesSource = ReviewCpetParas.GetInstance().Time,
  18.             //    ValuesSource = ReviewCpetParas.GetInstance().Flow,
  19.             //    ConnectionStrokeThickness = 2,
  20.             //    ConnectionStroke = new SolidColorBrush(Colors.Red),
  21.             //});
  22.         }
  23.         public void Dispose()
  24.         {
  25.             this.Chart.Content = null;
  26.             this.Chart.View.DataContext = null;
  27.             this.Chart.View = null;
  28.             this.Chart.Data.DataContext = null;
  29.             this.Chart.Data = null;
  30.             this.Chart.DataContext = null;
  31.             this.Chart2.Content = null;
  32.             this.Chart2.DataContext = null;
  33.             this.Chart2.View = null;
  34.             this.Chart2.Data.DataContext = null;
  35.             this.Chart2.Data = null;
  36.             this.Chart2.DataContext = null;
  37.             Root.Children.Clear();
  38.         }
  39.         private void Button_Click(object sender, RoutedEventArgs e)
  40.         {
  41.             Dispose();
  42.             this.Close();
  43.             GC.WaitForPendingFinalizers();
  44.             GC.Collect();
  45.         }
  46.     }
复制代码
回复 使用道具 举报
子曰
中级会员   /  发表于:2015-12-29 13:09:00
7#
回复 6楼gw0506的帖子

您好,用您的方法我测试了下,还是出现内存一直增加的情况,
因为我们的项目用到的chart比较多,所以这种情况还是不能接受,还可以进行进一步优化吗?
回复 使用道具 举报
gw0506
超级版主   /  发表于:2015-12-29 15:43:00
8#
再没有优化的空间了。原因我也给你讲了,这是.NET GC机制所致,他就是这个样子。
更进一步,更具有针对性的办法还得你这表找了。用antiprofile去分析一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部