2017-07-18 7 views
0

私はjson文字列を返しますwebserviceを持っています。 Alltogehter私はBLOBデータを持つ432個のJSONオブジェクトを持っています。 各Web要求では、432のオブジェクト30個、432のiamまで取得します。 各逆シリアル化で、逆シリアル化する時間が増加します。 30オブジェクト必要な秒数は9秒、消滅秒数は15秒です。 463オブジェクトは1,3 GBです。30個のブロブオブジェクトを持つ大きなjsonデータを逆シリアル化する

私のコードを調整するにはどうしたらいいですか?30オブジェクトには9秒以上は必要ありません。

文字列は次のようになります。

{ 
    "d:" [ 
    { 
     "id": "1", 
     "groesse": 2515221, 
     "byteasbase64string": "the base64 string" 
    }, 
    { 
     "id": "2", 
     "groesse": 887748, 
     "byteasbase64string": "the base64 string" 
    } 
    ] 
} 

HERESに私のC#コード:

List<db.dwaprotokolldatei> getProtokolldatei = new List<db.dwaprotokolldatei>(); 
using (postStreamGPD = resGPD.GetResponseStream()) 
{ 
    using (srGPD = new StreamReader(postStreamGPD)) 
    { 
     string responseFromServerGPD = srGPD.ReadToEnd(); // Long running time 
     getProtokolldatei = JsonConvert.DeserializeObject<db.rootobject>(responseFromServerGPD).d;// Long running time 
     responseFromServerGPD = ""; 
    } 
} 

reqGPD = null; 
postDataAsBytesGPD = null; 
postStreamGPD.Dispose(); 
postStreamGPD = null; 
resGPD.Dispose(); 
resGPD = null; 
srGPD.Dispose(); 
srGPD = null; 

GC.Collect(); 

WebRequestクラス:

reqGPD = (HttpWebRequest)HttpWebRequest.Create("*****"); 
         reqGPD.Method = "POST"; 
         reqGPD.ContentType = "application/json"; 
       mobileJSON = ConvertTOJSONMobile(existingMobile); 

         postDataAsBytesGPD = Encoding.UTF8.GetBytes(mobileJSON); 
         postStreamGPD = reqGPD.GetRequestStream(); 
         postStreamGPD.Write(postDataAsBytesGPD, 0, postDataAsBytesGPD.Length); 
         postStreamGPD.Flush(); 
         postStreamGPD.Dispose(); 

          resGPD = reqGPD.GetResponse(); 
+0

- それは、すでに(あなたの場合、 'postStreamGPD'と' srGPD'で)包まれたインスタンス上の 'のDispose()'メソッドを呼び出すように '構築using'で何かを包みます。手動で行う必要はありません。 –

+0

これで問題は解決しません。 – Pascal

+0

いいえ、私はそれを答えとして与えていない、ただのコメントです。 =) –

答えて

0

Web構成で、あなたは必要とする:

<configuration> 
     <system.web.extensions> 
      <scripting> 
       <webServices> 
        <jsonSerialization maxJsonLength="50000000"/> 
       </webServices> 
      </scripting> 
     </system.web.extensions> 
    </configuration> 
+0

Webサービスからの問題ではありません。クライアントでは、Webサービス呼び出しからオブジェクトを取得します。ここで問題は、私のためにReadToEndの時間が増加します。 – Pascal

0

これを並列化できますか?

 List<db.dwaprotokolldatei> getProtokolldatei = new List<db.dwaprotokolldatei(); 
     Parallel.ForEach(urls, url => 
     { 
      var str = GetStringFromWebService(url); 
      getProtokolldatei.AddRange(Deserialize(str)); 
      DisposeAll(); 
     }); 
0

ReadToEnd()ははるかに高速です。ちょうどあなたの情報について

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
      { 
       reader.ReadToEnd(); 
      } 
関連する問題