2012-02-10 7 views
0

私はDelphiXE2で書かれた.Net WebServiceとスタンドアロンアプリケーションを持っています。リストデータを圧縮するC#WebサービスDelphiでスタンドアロンクライアントに送信

多くのアイテム(400)を含むリストを提出すると、FindAllEntity()メソッドが非常に遅くなります。

リストのデータコンポーネントを圧縮することを研究しましたが、ファイルとイメージを圧縮するために使用されるGzip C#しか見つかりませんでした。

スタンドアロンアプリケーションにすぐに送信できるデータのリストを圧縮する方法はありますか?ここで

はコードです:

//MyRegularNewEntity 
    public class _MyEntity 
    { 
     public decimal id { get; set; } 
     public _otherEntity Customers { get; set; } 
     public string serial { get; set; } 
     public decimal cost { get; set; } 
    } 

    //My Controller 
    public IQueryable<c#ModelEntity> GetAllDatOfEntity() 
    { 

     IQueryable<C#ModelEntity> Dat; 
     //The containt of data base entity is save in Dat ListQueryable 
     Dat = db.MyEntity; 

     return Dat;   
    } 

    //My WebService 
    [WebMethod] 
    public List<_MyRegularEntity> FindAllEntity() 
    { 
     //Construct my repository 
     MyRepository ag = new MyRepository(); 
     //Asign the result in a variable of call to get all the dat 
     var Dat = ag. GetAllDatOfEntity(); 
     //Contruct the List with my entity to send for my client 
     List<_MyRegularEntity> list = new List<_MyRegularEntity>(); 
     //Add all dat element to my list 
     if (Dat != null) 
     { 
      foreach (var item in Dat) 
      { 
       var MyEntity = new _MyRegularEntity(); 
       MyEntity.id = item.id, 
       MyEntity.Custormers = new _otherEntity() 
       { 
        id=item.Customers.id, 
        firstname=item.Customers.firstname, 
        lastname=item.Custormers,lastname 
       }, 
       MyEntity.Serial = item.Serial, 
       MyEntity.Cost = item.Cost 

       list.Add(MyEntity); 
      }; 

     } 
     //THIS IS THE RESULT I NEED COMPRESS 
     return list; 
    } 
+1

ASMX Webサービスは従来の技術であり、新しい開発に使用しないでください。 WCFは新しい開発に使用する必要があります。 –

+0

私は同意しません... ASMXの部分ではなく、あなたはそうしてはいけません。むしろ、一般的なハンドラ(.ashx)はWCFとの格闘よりはるかに優れていることがわかりました。 – NotMe

答えて

0

Gzip圧縮はturned on at the server level in IISまたはweb.configファイルを介して行うことができます。これは "ファイル"を転送するためだけでなく、実際にクライアントとサーバーの間で何かを転送するために使用されます。

しかし、実際には遅いデータの転送か、遅いかのFindAllEntity()メソッド内に他のものがあるかどうかを確認するために、Webサービスをプロファイルする必要があります。

+0

私はフラグを使用してプロセスの時間を計算しました。結果は良好です。コントローラーでは、クエリ・マーク0,0000002segのフラグがasmxマーク0,0000402segにありますが、クライアント・アプリケーションではws:= GetSoapService ); FindAllItems();このプロセスは0,4セグをマークし、私はリストデータの圧縮が問題だと思います。あなたはGZipサービスの設定について知っています。これはWebConfigやIIS、いくつかのチュートリアル、System.IOとSystem.IOの圧縮を使用していますが、画像の圧縮方法のみを示しています。私はCの#の専門家ではないかもしれないバイトの配列でリストを置く必要があるかもしれない、私はアイデアを持っているが。 – Leo

関連する問題