MBo
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Проведём эксперимент. Рисуем шестьдесят тысяч прямоугольников разного цвета и размера на битмап указанного размера. На моей машине (видеокарта встроенная) получается 60000 rects time 833 ms flow 6.55 GB/sec т.е. поток данных составляет примерно половину пропускной способности моей памяти (14 GB/Sec), и для закраски большими пр-ками скорость ограничена ею. Для размеров прямоугольников в 10 раз меньше объём данных меньше в 100 раз, и получается time 79 ms flow 0.73 GB/sec причём здесь половину времени занимает уже установка цвета кисти и генерация случайных чисел. Для 6000 прямоугольников макс.размера 30 время укладывается в 10 миллисекунд, за секунду генерируются и отрисовываются 145 кадров. Код: var b: TBitmap; n, i, l, t, r, bt, maxsize: Integer; dt, sum: Int64; begin b := Tbitmap.Create; b.Width := 3840; b.Height := 2160; n := 60000; maxsize := 300; b.PixelFormat := pf32bit; sw := TStopWatch.Create; sw.Start; sum := 0; for i := 1 to n do begin l := Random(3840 - maxsize); t := Random(2160 - maxsize); r := l + Random(maxsize); bt := t + Random(maxsize); sum := sum + (r - l + 1) * (bt - t + 1) * 4; b.Canvas.Brush.Color := Random($1000000); b.Canvas.FillRect(Rect(l, t, r, bt)); end; Canvas.Draw(0, 0, b); dt := sw.ElapsedMilliseconds; Memo1.Lines.Add(Format('%d rects time %d ms flow %4.2f GB/sec', [n, dt, sum/1000000000/dt*1000])); b.Free; |
| Всего записей: 36 | Зарегистр. 02-09-2004 | Отправлено: 07:31 10-11-2016 | Исправлено: MBo, 07:33 10-11-2016 |
|