Silverlight 有没有办法使MapPolyline在WP7上具有更好的性能

Silverlight 有没有办法使MapPolyline在WP7上具有更好的性能,silverlight,performance,windows-phone-7,bing-maps,Silverlight,Performance,Windows Phone 7,Bing Maps,我目前正在使用WP7的Silverlight地图控件,并尝试在地图上显示驾驶方向。为了突出显示所需的管线,我使用了带有MapPolyline的MapLayer。问题是,即使将CacheMode设置为BitmapCache,只要用户平移或缩放地图,MapPolyline区域也会被重新绘制。我使用过其他控件,如椭圆或图钉,并且在启用BitmapCache的情况下,没有一个控件会重新绘制,并提供与MapPolyline相同的性能影响 这里有一个简单的例子 <maps:Map ZoomLe

我目前正在使用WP7的Silverlight地图控件,并尝试在地图上显示驾驶方向。为了突出显示所需的管线,我使用了带有MapPolyline的MapLayer。问题是,即使将CacheMode设置为BitmapCache,只要用户平移或缩放地图,MapPolyline区域也会被重新绘制。我使用过其他控件,如椭圆或图钉,并且在启用BitmapCache的情况下,没有一个控件会重新绘制,并提供与MapPolyline相同的性能影响

这里有一个简单的例子

    <maps:Map ZoomLevel="3">
        <maps:MapPolyline Name="line" Stroke="Red" StrokeThickness="9">
            <maps:MapPolyline.CacheMode>
                <BitmapCache/>
            </maps:MapPolyline.CacheMode>
            <maps:MapPolyline.Locations>
                <maps:LocationCollection>
                    <geo:GeoCoordinate Latitude="33" Longitude="33"/>
                    <geo:GeoCoordinate Latitude="36" Longitude="33"/>
                    <geo:GeoCoordinate Latitude="33" Longitude="36"/>
                </maps:LocationCollection>
            </maps:MapPolyline.Locations>
        </maps:MapPolyline>       
    </maps:Map>
如果将App.Current.Host.Settings.EnableRedrawRegions设置为true;您可以看到发生的重画。如果多段线较大且放大距离较近,则性能尤其差

有什么可以帮忙的吗?原生的Bing地图绘制的路线非常流畅,所以我认为应该有办法解决这个问题


谢谢

你能再解释一下问题是什么吗

我有一个应用程序-RunSat-在其中我用几百个点绘制多段线,例如,我刚看了一次3小时的自行车骑行,这画得很好-包括在缩放操作期间

即使使用上面的示例代码,我也不理解这个问题。帮助-您是在手机上测试还是在模拟器上测试


至于CacheMode和BitmapCache,我真的不确定是否要在地图上使用这些设置-如果有帮助的话,我不会在RunSat中使用它们-我只是让手机自己绘制自己的GPU图形。

你能再解释一下问题是什么吗

我有一个应用程序-RunSat-在其中我用几百个点绘制多段线,例如,我刚看了一次3小时的自行车骑行,这画得很好-包括在缩放操作期间

即使使用上面的示例代码,我也不理解这个问题。帮助-您是在手机上测试还是在模拟器上测试


至于CacheMode和BitmapCache,我真的不确定是否要在地图上使用这些设置-如果有帮助的话,我不会在RunSat中使用它们-我只是让手机自己绘制自己的GPU图形。

我一直在使用由一条大地图多段线和几百个位置点和十几个或两个椭圆控件组成的测试路线-通常在非常近的距离放大时,性能开始落后-四处搜索似乎还可以。按照您的模型,我禁用了BitmapCache,这实际上起到了帮助作用——尽管它仍然有些滞后。我猜因为它在每个平底锅上都被重新画过,缓存线没有意义,但是bitmapcache确实有助于提高椭圆的性能。如果您想提高性能,另一种方法是降低多段线的细节级别-通过简单的抽取或通过Douglas Peuckers等更智能的算法,因为bitmapcache是UIElement级别的API,可以为单个贴图组件启用/禁用它,但可能不会有多大帮助-抱歉!我发现,如果在mapzoom事件中将MapPolyline的可见性设置为“折叠”,然后在ViewChangeEnd事件中将其设置为“可见”,则在点数较大的情况下,它的性能会更好。还感谢Douglas Peucker算法的参考,我将尝试在不同的缩放级别上实现这一点:我一直在使用由一条大的mappolyline和几百个位置点以及十几个或两个椭圆控件组成的测试路线-通常在非常近距离放大时,性能开始落后-四处搜索似乎还可以。按照您的模型,我禁用了BitmapCache,这实际上起到了帮助作用——尽管它仍然有些滞后。我猜因为它在每个平底锅上都被重新画过,缓存线没有意义,但是bitmapcache确实有助于提高椭圆的性能。如果您想提高性能,另一种方法是降低多段线的细节级别-通过简单的抽取或通过Douglas Peuckers等更智能的算法,因为bitmapcache是UIElement级别的API,可以为单个贴图组件启用/禁用它,但可能不会有多大帮助-抱歉!我发现,如果在mapzoom事件中将MapPolyline的可见性设置为“折叠”,然后在ViewChangeEnd事件中将其设置为“可见”,则在点数较大的情况下,它的性能会更好。另外,感谢参考Douglas Peucker算法,我们将尝试为不同的缩放级别实现该算法: