2012-01-04 16 views
1

私は、Excel 2010 VSTOソリューション(Visual Studio 2010でExcelブックのコードビハインドを行っています)に取り組んでおり、読み込みと書き込みの両方の操作のために集中型SQL Server 2008 R2データソースと対話する必要があります。高性能Excel VSTO to SQL Serverを達成するには?

データベースには、プライマリテーブルと関連する行に最大15,000の行が含まれます。理想的には、スプレッドシートはデータベースから読み込まれ、非同期で使用され、アップロードされてデータベースが更新されます。大量のデータを対象としたパフォーマンスが心配です。

スプレッドシートは、Webポータルからダウンロードできるようになります。

私は、これまで2解決策を検討しています

  1. A WCFサービスは、インラインワークブッククエリが全体に必要なデータセットを使用してそのテーブルを移入するために、データアクセス層として機能します。ワークブック内から更新がトリガーされると、変更がWCFサービスに送信されます。

  2. Webポータルからダウンロードして、隠しワークシート内の独自のデータをブックにあらかじめロードします。修正されたワークブックをWebポータル経由でアップロードすることで、変更が保存されます。

我々はコア機能の働きを持ってまで、私は最適化についてあまりfussedないんだけど、私はトラックダウンアーキテクチャの面で何か良いオプションに自分自身を閉鎖する必要はありません。

私はスローダウンを避けるために一度に小さなデータのサブセットを選択的に使用しなければならないシナリオを回避したいと思います - その種の動作をスプレッドシートに統合することは、

おそらく、この分野でもう少し経験を積んだ誰かが、足で私たちを撃たないアプローチをお勧めしますか?同様の行われた

答えて

3

  1. は、あなたのデータアクセスコードのすべてがバックグラウンドスレッドで実行されていることを確認してください。 Excelの関数とアドイン(主に)はUIスレッド上で動作し、UIを応答させる必要があります。マーシャリングは重要ではありません(Excel'03ではピンボケが必要でしたが、10年に変更されている可能性があります)。

  2. interop操作を可能な限りチャンクにします。各interop呼び出しには大きなオーバーヘッドがあります。したがって、プログラムで書式設定する場合は、できるだけ多くのセルを一度に(範囲を使用して)書式設定してください。このアドバイスは、データの変更にも適用されます.Diffを使用してUIを更新するだけで、データセットのコピーをメモリに保存して差分を検出する必要があります。一度に多数のUIアップデートが入った場合は、更新中にUIスレッドに進行状況が表示されるように人為的な一時停止(スロットル)を挿入することができます。

  3. 中間層アプリケーションでSQL ServerおよびさまざまなExcelインスタンスと通信する必要があります。これにより、キャッシング、ロードバランシング、ホットフェイルオーバーなど、後で良いことをすることができます。これは、提案したWCFサービス、またはWindowsサービスとすることができます。

+0

特に、バックグラウンドスレッドを使用していただきありがとうございます。 中間層アプリケーションを使用して、最大15,000のレコードを効率的にワークブックにロードするにはどうすればよいでしょうか?どのようなパフォーマンスが現実的に期待するべきですか? – Martaver

+0

15000レコードは大したことではありませんが、あなたは合理的にコンパクトなトランスポートフォーマット(例えば、XML over HTTPではなく)を持っていると仮定します。すべてのパフォーマンスチューニングの練習と同様に、すべての作業(サーバー要求処理、ネットワークI/O、クライアント要求処理、相互運用呼び出しなど)を測定して、どこに作業を集中させるかを把握します。 –

+0

合意。 15000件のレコードをかなり大幅に圧縮することもできます。ご協力いただきありがとうございます! – Martaver

1

あなたのスプレッドシートファイルを使用すると、スプレッドシートを生成するために、サーバー上EPPlusを使用することができ、サーバからダウンロードする必要がある場合は、データをアップロードするために、ExcelのアプリでアドインからWCFを使用することができるよりも、それは、VSTOよりもはるかに高速になります。範囲を使用してデータを読み取るには、シートに数式がないと書いたほうがはるかに時間がかかります。また、WCFでは、バッチを使用して15000行を更新することができます。エナレン操作のために約2分〜5分かかります。

+0

EPPlusやAsposeのようなものを使って、データの初期部分を生成するのは、あらかじめ読み込んでおくとはるかに簡単です。 – Martaver

関連する問題