[英]performance at arcgis silverlight api
我正在使用GraphicsLayer
與SimpleLineSymbol
進行道路符號系統。 我的代碼與以下代碼相同:
for (int i = 0; i < 200000; i++)
{
myGraphicsLayer.Graphics[i].Symbol = mySimpleLineSymbol;
}
這段代碼運行速度很快,但在地圖上繪制linesymbol非常慢。(大約6秒)。 請幫我增加符號系統性能。
我將所有幾何體收集到一條折線中並為其創建一個圖形。 然后我創建符號和顯示。 渲染和顯示在地圖上需要一秒鍾 。
var myPolyline = new ESRI.ArcGIS.Client.Geometry.Polyline();
for (int i = 0; i < 200000; i++)
{
myPolyline.Paths.Add(((ESRI.ArcGIS.Client.Geometry.Polyline)myGraphicsLayer.Graphics[i].Geometry).Paths[0]);
}
Graphic myGraph = new Graphic();
myGraph.Geometry = myPolyline;
ESRI.ArcGIS.Client.Symbols.SimpleLineSymbol sym = new ESRI.ArcGIS.Client.Symbols.SimpleLineSymbol();
sym.Color = new SolidColorBrush(Colors.Red);
sym.Width = 2;
myGraph.Symbol = sym;
myGraphicsLayer.Graphics.Add(myGraph);
那是很多台詞。 一個想法是減少需要繪制的行數。 您可以檢查地圖的縮放級別或比例,並使用它來確定要繪制的線條。 例如,在某些尺度上,您可能只繪制特定道路,例如主要道路。 您可以通過在循環中添加if語句來檢查特定屬性(假設存在一個):
if (myGraphicsLayer.Graphics[i].Attributes["Type"] == "major") { }
由於您有很多功能,因此雖然有一些事情需要考慮,但性能總是會受到影響。 首先確保您擁有Silverlight和Esri API的最新版本,因為新版本中通常會有性能改進。 由於您在客戶端上進行渲染,因此主機的規格將影響性能,如果您無法利用與比例相關的渲染或特征聚類,並且您只是使用基本特征符號,那么獲得更好性能的唯一方法是使用ArcGIS Server在服務器上呈現要素並將其作為動態地圖服務圖層使用。 這意味着你將無法使用maptips等,雖然有一些解決方法,例如在懸停時顯示彈出窗口。 您還可以輕松實現點擊識別。
您可以在線程之間划分任務以進行並行工作以獲得更好的性能。
new Thread(() =>
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
for (int j = 0; j < 50000; j++)
{
myGraphicsLayer.Graphics[j].Symbol = mySimpleLineSymbol;
}
});
}
).Start();
new Thread(() =>
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
for (int k = 50000; k < 100000; k++)
{
myGraphicsLayer.Graphics[k].Symbol = mySimpleLineSymbol;
}
});
}
).Start();
new Thread(() =>
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
for (int l = 100000; l < 150000; l++)
{
myGraphicsLayer.Graphics[l].Symbol = mySimpleLineSymbol;
}
});
}
).Start();
new Thread(() =>
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
for (int m = 150000; m < 200000; m++)
{
myGraphicsLayer.Graphics[m].Symbol = mySimpleLineSymbol;
}
});
}
).Start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.