2016-08-26 3 views
0

ExcelDNAを使用してExcelアドインを作成し、UDF(ユーザー定義関数)を作成しています。サーバーへの接続数を減らすために複数の要求をパックする

UDFはサーバーへの接続を確立し、そのサーバーはSQLデータベースに接続してデータを取得し、クライアントに戻します。

ただし、このUDFは1つのワークシートで何百回も呼び出されることが予想されます。

私はサーバーへのリクエスト数を減らす方法を見つけようとしています。この瞬間のように、これはテンプレートが(簡体字)のように見える方法です

ITEM  | JAN 2016 | FEB 2016 | MAR 2016 | 
--------------------------------------------------- 
    ITEM 1 | UDF | UDF | UDF | 
    ITEM 2 | UDF | UDF | UDF | 
    ITEM 3 | UDF | UDF | UDF | 
    ITEM 4 | UDF | UDF | UDF | 
    ITEM 5 | UDF | UDF | UDF | 
    ITEM 6 | UDF | UDF | UDF | 

だから、今、これは合計で18個の要求を送信します。

私は今それを行うことを考えています方法は、要求が最初に送信される方各アイテムのためにすべてのデータを取得することである6

への要求の数を減らすために試してみたいですその項目の月間表示同じアイテムの2番目のリクエストは、最初のリクエストの結果を待つだけです。 2016年1月の列のUDFが最初に呼び出された場合ITEM 1、 については

が、それはITEM 1のすべての月のデータを要求し、その後に他の要求のためにどこかにそのデータを格納します。たとえば

から取ります。

次に、2番目のリクエストが来たとき(つまり、MAR 2016が次にあるとします)、そのUDFはJAN 2016のUDFの結果を待ちます。このようにして、MAR 2016のUDFは、サーバ。

しかし、これを実装する方法はわかりません。私は、キーワードを待っていると非同期を聞いたが、それらを使用して経験がありません。

その他の問題の解決方法も歓迎します。

+0

'async-await'タグを削除することを検討してください。バッチ処理や特に質問には関係しないためです。 – cassandrad

答えて

0

非同期呼び出しは、呼び出し回数を減らすのに役立つわけではなく、より多くの並列呼び出しを開始するだけです。通話数が問題になりますか?おそらく、ここでの「ベストプラクティス」はあなたを助けます:C# Data Connections Best Practice?

0

非同期関数とバッチ処理が役に立ちます。基本的には、短期間(たとえば半秒)バックエンドに送信したいすべての要求を収集して、バックエンドへの単一のコールを発信します。結果が戻ったら、各要求に対して非同期呼び出しを完了します。 https://gist.github.com/govert/1bf0a1026ec3aaee19a8

エクセル-DNAのGoogleグループは、この例についてのフォローアップの質問のために、おそらくより良いです:

この要旨は、非同期およびバッチ処理部品の完全な実装を持って、あなただけの一括評価関数を供給する必要が。

関連する問題