DrawGeometry很慢

时间:2014-02-18 06:38:25

标签: c# wpf geometry onrender

我有一组使用DrawGeometry在我的覆盖方法OnRender上绘制的坐标。我试图绘制的多边形之一是121000点,这是很多。这会减慢我的地图控件。

当这个OnRender发生时,点数已经在内存中我只是将点数传递给DrawGeomerty

这是OnRender发生的一个例子

MapProjection pa = new MapProjection();

if (this.mapCommunication.MapLayers == null)
{
    return;
}

foreach (KeyValuePair<Guid, MapLayerHelper> coordinatePointsLayer in this.mapCommunication.MapLayers)
{
    if (!coordinatePointsLayer.Value.IsVisible)
    {
        continue;
    }

    if (coordinatePointsLayer.Value.State != LayerEnum.Visible)
    {
        continue;
    }

    foreach (CoordinateHelper coordinatePoints in coordinatePointsLayer.Value.Coordinates)
    {
        foreach (StreamGeometry item in coordinatePoints.GeomertyPoints)
        {
            drawingContext.DrawGeometry(null, penDrawing, item);
        }
    }
}

我的问题是,如果我优化,我应该从这里采取什么方向,或者我应该尝试合并DirectX这个帮助或我应该采取什么方法?

感谢您的帮助,我非常擅长渲染这么多数据。

1 个答案:

答案 0 :(得分:0)

我最终想到的是帮助我,如果我错了:) WPF已经建立在Direct X上,所以如果我尝试通过像SharpDX这样的东西进行访问,那对我没什么帮助,因为我正在进行dubble缓冲和那个已经实施。

所以我实现的不是在OnRender中读取点而是使用具有固定大小的Canvas并添加了System.Windows.Shapes.Path以这种方式添加我的Geometry。

这导致WPF更好地管理dubble缓冲,并且点渲染速度更快。