C# 如何提高使用SkiaSharp绘制大型多边形的性能?

C# 如何提高使用SkiaSharp绘制大型多边形的性能?,c#,xamarin.forms,skiasharp,C#,Xamarin.forms,Skiasharp,我有一个轮廓,大约有20000个点,我正在使用SkiSharp绘制。它有点慢(200毫秒),我想知道我的代码是否有任何性能改进: var path = new SKPath(); path.AddPoly(contour.Select(p => p.ToSKPoint()).ToArray()); // contour is Point[] canvas.DrawPath(path, paint); 当我的视图缩小时,可能甚至看不到那么多的点,所以我考虑的一个可能的优化是均匀地过滤掉点

我有一个轮廓,大约有20000个点,我正在使用
SkiSharp
绘制。它有点慢(200毫秒),我想知道我的代码是否有任何性能改进:

var path = new SKPath();
path.AddPoly(contour.Select(p => p.ToSKPoint()).ToArray());  // contour is Point[]
canvas.DrawPath(path, paint);

当我的视图缩小时,可能甚至看不到那么多的点,所以我考虑的一个可能的优化是均匀地过滤掉点(比如每10或100个点只保留一个点)。

通过使用SKGLView而不是SKCanvasView,我将渲染时间从6ms提高到1ms。 它们具有相同的API,并且非常易于交换

另外,正如您所说,根据缩放级别动态减少点的数量。又名LOD-详细程度


如果可行的话,禁用抗锯齿。

一定要减少数据量-可以使用平滑算法,但我建议从消除90%的数据开始,看看数据是如何变化的performance@Jason减少点数肯定会有所帮助,所以当用户被缩小时,也许我可以做到这一点(并且无法注意到缺失的点)。但是,放大时,我想显示每个点。我注意到,放大时,性能再次提高(因为只需要绘制一部分点)。@redcurry在视频游戏中称为细节级别(LOD)。问题非常相似,远几何不需要像近几何那样详细。请你找到一些可能有用的想法。如果你找到了解决方案,请回答你自己的问题,以便其他人可以从中受益。