在我的情况下,我有2D ArrayList充满了绘制水平线,垂直线和填充矩形时使用数据的对象。在不同的情况下,对象的数量是不同的,并且图像具有不同数量的画线和矩形。但是图像有时需要重新绘制。重绘的东西越多,屏幕上的闪光就越强烈(我希望你能弄清楚我的意思是“闪光”)。C#,WinForms绘制存储在ArrayList中的数据。这是个好主意吗?
我已经尝试双缓冲,但我不认为我做它的右闪仅改变的类型......但是,这不是当前的情况。
我已阅读,它很容易从任何地方ArrayList中添加和删除元素(无论类型),但对它们的访问是很难的。我还读到List更好地表现ArrayList(这是否意味着该程序将需要更少的计算机资源?),但是从最后添加和删除元素只是很容易的。但我不确定Array的性能是否最快。这让我觉得如果我用Array或List更改ArrayList,闪烁可能变得更弱。
这不会是在我的情况的问题,因为所有我存储在ArrayList中的元素构成同一类。
我的问题是:如果我用数组或列表替换ArrayList,我可以削弱闪烁吗?
在某些情况下,对象的数量不只是2×2或4×3,但10×10和更大量...(N×M的有了我的意思是ň阵列,M个元素。)和矩形需要吸引更多的时间。 “减弱闪烁”我并不是指“停止闪烁”,我的意思是如何更快地绘制图形。是的,我知道我必须在双缓冲上工作才能解决问题。但如果让绘图更快(之后双缓冲将变得更快),应用程序也将变得更快。这是属于“必须做”列表的内容之一。 – AlexSavAlexandrov
我总是支持编写更好的优化代码,性能改变是否明显。但在你的情况下,在1000x1000的迭代中,你将获得大约10-50毫秒。想想画一个1000000个矩形需要多长时间,而不是10-50毫秒。 (请参阅此处:http://www.dotnetperls.com/unboxing)。这些int类型的结果如此,我认为它可能需要多达5倍以上的其他类型,并减少迭代100倍。所以,我们都知道绘制1000000个矩形,类似的对象需要花费很长时间。恕我直言,性能增益不会高于%0.1。 –