我正在做一个项目,我需要每毫秒绘制N
一次椭圆,where和.X
0 <= N <= 10^5
5 <= X <= 500
我开始使用 WPF,以及它的相关控件,例如Canvas
用于视口的Ellipse
控件和用于椭圆的控件。我将省略号存储在一个列表中,并且:
- 每次椭圆的数量增加时,我都会在列表中添加一个新的椭圆。
- 每次存储的椭圆数
myViewport.Children
少于myListOfEllipses.Count
我将这些椭圆添加到我的视口时,我都会从视口中删除多余的椭圆而不将它们从我的列表中删除。 - 对于每个椭圆,我计算新位置并使用
Canvas.SetLeft
andCanvas.SetTop
方法。
性能相当不错,但是X
设置为最小值N
大于1000时会出现减速。
我考虑过使用DrawingVisual
s,但我认为绘制和显示位图也更快。因此,我决定将我的视口替换为具有和使用库的Image
控件。Source
WriteableBitmap
WriteableBitmapEx
- 每次我使用
myBitmap.Clear(Colors.White)
. - 每次我使用
myBitmap.FillEllipse(...)
.
好吧,问题是后一种方式比前者慢得多。这怎么可能?我哪里错了?如何提高位图的性能?