クライアント側でデータを圧縮解除するには、C1.Zip ライブラリ(Silverlight バージョン)への参照を追加して MasterDetail プロジェクトを変更し、次のように MainPage.xaml.cs ファイルの svc_GetDataCompleted メソッドを変更します。
コードのコピー
|
|
---|---|
void svc_GetDataCompleted(object sender, GetDataCompletedEventArgs e) { // エラーを処理します if (e.Error != null) { _tbStatus.Text = "データのダウンロードに失敗しました。"; return; } // サーバーからのデータストリームを解析します(DataSet は XML) _tbStatus.Text = string.Format( "データ取得中:{0:n0} KB", e.Result.Length / 1024); var ms = new MemoryStream(e.Result); _ds = new DataSet(); using (var zr = new C1.C1Zip.C1ZStreamReader(ms)) _ds.ReadXml(zr); //_ds.ReadXml(ms); // データを取得し、コントロールをデータに連結します BindData(); } |
ここでは、圧縮されたストリームから DataSet を直接読み込むのではなく、データを自動的に圧縮解除する C1ZStreamReader を使って読み込みます。
メモ:圧縮しない場合、このアプリケーションは起動時に約 150k バイトのデータを転送します。これらの小さな変更を加えた後は、初期のデータ転送は 50 KB 未満に減少します。この2つの小さな変更により、転送されるデータ量は 2/3 ほど減少します。これにより、ネットワークトラフィックが減少し、アプリケーションがデータを初期化して表示するまでの時間が短縮されます。 |