讀取大JSON字符串時,我使用下面的代碼上線(顯示UI進度對話框)從ASP.Net MVC Web服務讀取JSON字符串間歇性故障。數據可以在1 mb到4 mb之間。MonoDroid的:從Web服務
public static class WebRequestEx
{
public static string ExecuteRequestReadToEnd(this WebRequest req)
{
var resp = req.GetResponse();
using (var resps = resp.GetResponseStream())
{
StringBuilder sb = new StringBuilder();
// read through the stream loading up the string builder
using (var respRdr = new StreamReader(resps))
{
//return respRdr.ReadToEnd();
while (!respRdr.EndOfStream)
{
sb.Append(respRdr.ReadLine());
}
return sb.ToString();
}
}
}
}
stacktrace如下。
I/mono (15666): Stacktrace:
I/mono (15666):
I/mono (15666): at System.Threading.WaitHandle.set_Handle (intptr) <0x0008b>
I/mono (15666): at System.Threading.EventWaitHandle..ctor (bool,System.Threading.EventResetMode) <0x00053>
I/mono (15666): at System.Threading.ManualResetEvent..ctor (bool) <0x0001f>
I/mono (15666): at (wrapper remoting-invoke-with-check) System.Threading.ManualResetEvent..ctor (bool) <0xffffffff>
I/mono (15666): at System.Net.WebAsyncResult.get_AsyncWaitHandle() <0x00073>
I/mono (15666): at System.Net.WebAsyncResult.WaitUntilComplete (int,bool) <0x00033>
I/mono (15666): at System.Net.WebConnectionStream.Read (byte[],int,int) <0x000b3>
I/mono (15666): at System.IO.StreamReader.ReadBuffer() <0x00047>
I/mono (15666): at System.IO.StreamReader.ReadLine() <0x0014b>
I/mono (15666): at System.WebRequestEx.ExecuteRequestReadToEnd (System.Net.WebRequest) <0x000ab>
問題是這不會每次都發生,並且是間歇性的。這很糟糕,因爲它會導致整個應用程序凍結,並且進度對話框停滯不前,用戶無法對應用程序執行任何操作。我在調用代碼中有一個try/catch塊,但是這個異常似乎解決了它。
我較早使用ReadToEnd的和這是炸燬間歇以及讓我通過線路切換到讀取線。
堆棧跟蹤不是特別有益,因爲服用點似乎內的ReadLine是想在()。
想法/建議/選擇?
您應該考慮分頁您的數據並批量使用,不建議您一次性下載4MB大小的手機。 –