none
图形渲染加载时间如何用计时器 RRS feed

  • 问题

  • 当图形元素比较多时,可以用定时器在CODE前后加上测试计时,可是呈现会滞后很长时间 ,在CODE部分之外,这个该怎么处理?

    非常感谢!

    sw.Restart();
                ChartHelp.JqbDrawStreamGeo(canvas1,   linesDataList, Brushes.Red, 5d);
                double t2 = sw.ElapsedMilliseconds;
               // sw.Stop();
                Title += " t2=" + t2.ToString();

            public static  void JqbDrawStreamGeo(Canvas canvas,  List<JqbLinesDataClass> jqbLinesDataList, Brush brush, double strokeThinkness)
            {
                try
                {
                    Path myPath = new Path();
                    RenderOptions.SetBitmapScalingMode(myPath , BitmapScalingMode.LowQuality);
                    myPath.Stroke = brush;
                    myPath.StrokeThickness = strokeThinkness;

                    // Create a StreamGeometry to use to specify myPath.   
                    StreamGeometry geometry = new StreamGeometry();
                    geometry.FillRule = FillRule.EvenOdd;

                    // Open a StreamGeometryContext that can be used to describe this StreamGeometry    
                    // object's contents.   
                    using (StreamGeometryContext ctx = geometry.Open())
                    {
                        for (Int32 i = 0; i < jqbLinesDataList.Count; i++)
                        {
                            ctx.BeginFigure(new Point(jqbLinesDataList[i].X1, jqbLinesDataList[i].Y1), true /* is filled */, false  /* is closed */);
                            ctx.LineTo(new Point(jqbLinesDataList[i].X2, jqbLinesDataList[i].Y2), true /* is stroked */, false /* is smooth join */);
                        }
                    }
                   // geometry.Freeze();
                    // Specify the shape (triangle) of the Path using the StreamGeometry.   
                    myPath.Data = geometry;

                    canvas.Children.Add(myPath);
                    myPath.Loaded += new RoutedEventHandler(myPath_Loaded);
                }
                catch (Exception exc)
                {
                  MessageBox .Show   (exc.ToString());
                }
            }

    2012年11月19日 16:08

全部回复

  •    

    我是打印log来分析执行时间的,精确到毫秒。当然有优势也有劣势的,呵呵。

    Trace.WriteLine(DateTime.Now.ToString("hh:mm:ss fff") + str);

    2012年11月20日 1:16
  • 谢谢回复,这个我知道结果输出,我不知道的是图形何时加载完成触发,利用什么事件来判断
    2012年11月20日 2:31