Exemple #1
0
        void ReportStat(VisualData visual)
        {
            var new_list = from task in tasks
                           join vs in visual.visual
                           on task.Name equals vs.Key
                           select new
            {
                // 期望时间(执行时间)
                PredictTime = (double)task.ExecuteTime,
                // 实际执行时间(周转时间)
                ExecuteTime = (double)vs.Value.during.exec_time
            };
            var T = (from list in new_list
                     select list.ExecuteTime).Average();
            var W = (from list in new_list
                     select list.ExecuteTime / list.PredictTime).Average();

            action(new string('-', 50));
            action(string.Format("平均周转时间 = {0:f}", T));
            action(string.Format("平均带权周转时间 = {0:f}", W));
        }
Exemple #2
0
        Bitmap DrawSchd(VisualData result)
        {
            var  max_time = result.visual.Values.ToList().ConvertAll(new Converter <VisualStruct, int>(a => a.during.start_time + a.during.exec_time)).Max();
            Size size     = new Size(VisualSettings.Margin * 2 + VisualSettings.DispTextWidth + VisualSettings.TimeSpanWidth * (max_time + 1),
                                     result.visual.Count * (VisualSettings.TaskHeight + VisualSettings.TaskSpacing) + VisualSettings.TaskBlanking + VisualSettings.TimeHeight * 2);
            Bitmap   bitmap   = new Bitmap(size.Width, size.Height);
            Graphics graphics = Graphics.FromImage(bitmap);

            graphics.Clear(Color.WhiteSmoke);
            {
                int w = 0, h = 0;
                var font   = new Font("Microsoft Yahei", 12);
                var format = new StringFormat()
                {
                    Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center
                };
                var brush = new SolidBrush(Color.Black);
                var blue  = new SolidBrush(Color.Cyan);
                var gray  = new SolidBrush(Color.LightGray);
                var pen   = new Pen(Color.Black);
                // 主体
                foreach (var fk in result.visual)
                {
                    w  = VisualSettings.Margin;
                    h += VisualSettings.TaskSpacing;
                    // 任务名
                    graphics.DrawString(fk.Key, font, brush, new Rectangle(w, h, VisualSettings.DispTextWidth, VisualSettings.TaskHeight), format);
                    w += VisualSettings.DispTextWidth + fk.Value.during.start_time * VisualSettings.TimeSpanWidth;
                    var fill_rect = new Rectangle(w, h, fk.Value.during.exec_time * VisualSettings.TimeSpanWidth, VisualSettings.TaskHeight);
                    // 任务主体
                    graphics.FillRectangle(gray, fill_rect);
                    var clips = fk.Value.cpu_clips;
                    w = VisualSettings.Margin + VisualSettings.DispTextWidth;
                    foreach (var tp in clips)
                    {
                        // CPU
                        var rt2 = new Rectangle(w + tp.Item1 * VisualSettings.TimeSpanWidth, h,
                                                tp.Item2 * VisualSettings.TimeSpanWidth, VisualSettings.TaskHeight);
                        graphics.FillRectangle(blue, rt2);
                        graphics.DrawRectangle(pen, rt2);
                    }
                    graphics.DrawRectangle(pen, fill_rect);
                    h += VisualSettings.TaskHeight;
                }
                // 刻度
                w  = VisualSettings.Margin;
                h += VisualSettings.TaskBlanking;
                graphics.DrawLine(pen, w, h, size.Width - VisualSettings.Margin, h);
                w += VisualSettings.DispTextWidth;
                // 虚线
                {
                    var p = new Pen(Color.Black);
                    p.DashPattern = new float[] { 9, 3 };
                    var hh = result.visual.Count * (VisualSettings.TaskHeight + VisualSettings.TaskSpacing) + VisualSettings.TaskBlanking;
                    foreach (var i in result.switches)
                    {
                        var ww = w + i * VisualSettings.TimeSpanWidth;
                        graphics.DrawLine(p, ww, 0, ww, hh);
                    }
                }
                // 坐标
                format.Alignment = StringAlignment.Center;
                for (int i = 0; i <= max_time; i++)
                {
                    var pt  = new Point(w, h);
                    var pt1 = new Point(w, h + VisualSettings.DegreeHeight);
                    graphics.DrawLine(pen, pt, pt1);
                    pt.Offset(0, VisualSettings.TimeHeight + VisualSettings.TimeHeight / 2);
                    var rt = new Rectangle(pt, Size.Empty);
                    rt.Inflate(VisualSettings.TimeSpanWidth / 2, VisualSettings.TimeHeight / 2);
                    rt.Inflate(-2, -2);
                    graphics.DrawString(i.ToString(), font, brush, rt, format);
                    w += VisualSettings.TimeSpanWidth;
                }
            }
            return(bitmap);
        }