2013-12-23 61 views
0

我正在使用asp.net mvc。這個項目是一個基於地圖的項目。我有一個返回大json數據的操作方法。獲取大json數據結果asp.net mvc

public JsonResult MemberLocations() 
    { 
     var abonelikler = memberRepository.GetAll(); 

     var result = new { members }; 

     var jsonresult = Json(result, JsonRequestBehavior.AllowGet); 
     jsonresult.MaxJsonLength = 500000000; 

     return jsonresult; 
    } 

此方法返回成員位置。

[{memberX:"132.45", memberY:"212.21"}, {memberX:"112.45", memberY:"113.11"},........] 

json數據有45.000點(x,y)對。我得到這個指向地圖上的一個添加針。查詢結果非常晚。 (我正在使用javascript ajax請求。)

如何解決數據獲取機制。你解決了這樣的問題嗎?

+0

如果將'memberX'和'memberY'重命名爲'x'和'y',則可以節省12個字符乘以45.000 = 540.000。如果1個字符是1個字節,則可以節省高達0.5Mb :) – Marthijn

回答

1

您需要對性能進行簡介,這需要花費更多的時間。發送大小爲45的JSON對象的數組不會佔用更多時間。看起來它可能需要更多時間來獲取數據「memberRepository.GetAll()」。

0

首先,您應該檢查它是否確實是45k點的轉移,這會減慢應用程序的運行速度,或者它是您的數據檢索。只需使用圍繞memberRepository.GetAll();調用的秒錶,並測量提琴手響應的時間以評估檢索數據需要多少時間...

通常,您應該不會將如此多的數據發送到客戶端。它通常會導致糟糕的用戶體驗,特別是在較慢的設備(移動設備...)上。

也許你必須問自己,爲什麼你必須向客戶端發送45k座標?

您是否一次顯示地圖上的所有針腳?真? 如果沒有,只發送那些應該顯示的縮放級別/查看端口...

如果您仍然需要渲染那麼多的數據,請使用其他技術來渲染它,例如,在服務器上渲染切片。

大量LatLong座標的另一種選擇是對數據進行編碼,這會減小尺寸。例如this google algorithm