2015-11-30 11 views
-4

我目前正在開發一個報告應用程序來比較多個測試。我需要從控制器傳遞一個json對象到客戶端,爲報表繪製所有這些圖表。當我僅比較2次測試時,我在這裏附上了我得到的結果圖像。通過的數據是〜600kb,時間~3秒。 這裏是我的控制器使用的代碼:如何在傳遞大量Json對象時改進Asp.net Mvc應用程序?

var jsonResult = Json(new 
{ 
    ReportData = reportData 
}, JsonRequestBehavior.AllowGet); 
jsonResult.MaxJsonLength = Int32.MaxValue; 
return jsonResult; 

我怎樣才能提高我的應用程序的性能?任何建議,非常感謝。 Ps:如果我的問題不適合這裏的標準,請告訴我,以便我可以調整它。對於所有人已經downvoted,請評論,所以我可以改善下一次。感謝噸

enter image description here

+3

你得問問自己,這些數據是否都是需要的?一個更苗條和可能不太詳細的DTO可能是有序的。 –

+0

我必須通過這些數據。你的評論根本沒有幫助 – MinhNguyen

+1

@MinhNguyen在這種情況下,它可能沒有幫助*但它絕對是一個有效的問題。也許你應該在問題中注意所有的數據都是必需的,而且它們都不能被排除在外。 – mason

回答

2

如果要在深入那些3秒內,以確定究竟是他們丟失了。有很多事情發生在這裏:

  1. 您是從什麼地方建設這個reportData變量 - 測量需要多長時間
  2. 您序列化這個reportData可變進JSON - 測量需要多長時間

一旦你有了這些測量,你會知道你需要/可以優化的地方。如果事實證明3中的2.9s在1中丟失了,那麼你絕對應該改進你查詢數據的方式,或者優化你的數據存儲(假設你提供的信息是非常困難和主觀的) 。也許你只是忘了給SQL數據庫中的某個列添加索引 - 誰知道。

另一方面,如果事實證明你的瓶頸是2.那麼你肯定有一個巨大的設計問題。通常情況下,序列化不是一個問題,除非你正在做一些非常錯誤的事情,比如試圖序列化大量無人需要或人類可以使用的數據。在這種情況下,你應該與發明你正在實現的屏幕的UI人員交談,並向他們解釋在分辨率爲1024x768的屏幕上顯示100萬個點(僅僅是一個例子)是毫無意義的,然後當然會改進您的查詢,以便您的視圖模型不是那麼瘋狂的巨大。

所以底線是,你應該縮小在這個時間丟失的地方(使用探查器是一個非常好的開始,我會推薦你​​Telerik的JustTrace),以便你確切知道你需要改進的地方。

+0

感謝@Darin對你的建設性評論。正如你所看到的,我在這裏處理Json對象並不是很有經驗。那麼這個特殊情況下,當響應是〜600kb時,這被認爲是大量的數據?對於UI方面,我不會一次超過100k點,那還是太大了嗎? – MinhNguyen

+0

這很大程度上取決於您試圖實現的目標以及您如何顯示數據。我再次強烈建議您深入研究這些數據,以便了解是否浪費時間查詢數據或將其序列化爲JSON。一旦你得到了這些數字,你將能夠精確定位問題的確切位置,並提出更多有建設性的問題。 –

+0

我正在使用JustTrace,大部分消耗時間來自兩種方法:System.Threading.WaitHandle.WaitOne(...)和System.Threading.Thread.Sleep()。你認爲這是什麼原因?迄今爲止,非常感謝您的幫助 – MinhNguyen

相關問題