void Render(int points, int size) { var sw = Stopwatch.StartNew(); var r = new Random(); var pen = new Pen(Brushes.DeepPink, 2); pen.Freeze(); Trace.WriteLine("after freeze: " + sw.GetElapsedAndRestart().TotalMilliseconds); var d = new DrawingGroup(); using (var cx = d.Open()) { for (int i = 0; i < points; i++) { cx.DrawLine(pen, new Point(r.Next(0, 50), r.Next(0, 50)), new Point(r.Next(0, 50), r.Next(0, 50))); } } d.Freeze(); var dv = new DrawingVisual(); using (var cx = dv.RenderOpen()) { cx.DrawDrawing(d); //for (int i = 0; i < points; i++) //{ // cx.DrawLine(pen, new Point(r.Next(0, 50), r.Next(0, 50)), new Point(r.Next(0, 50), r.Next(0, 50))); //} } Trace.WriteLine("after draw: " + sw.GetElapsedAndRestart().TotalMilliseconds); var trb = new RenderTargetBitmap(size, size, 96, 96, PixelFormats.Pbgra32); trb.Render(dv); Trace.WriteLine("after render: " + sw.GetElapsedAndRestart().TotalMilliseconds); var x = trb.GetPixels(); Trace.WriteLine("after get pixels: " + sw.GetElapsedAndRestart().TotalMilliseconds); //trb.Save($@"C:\temp\shit\{size}.png"); }