我正在使用ExcelDNA编写Excel插件并创建UDF(用户定义函数)。
UDF建立与服务器的连接,该服务器连接到SQL数据库以检索数据并将其发送回客户端。
但是,预计这个UDF将在一个工作表中被调用数百次。
我正试图找到一种方法来减少对服务器的请求数量。
截至目前,这就是模板的样子(简化):
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个。
我现在想的方法是,对于每个项目,无论先发送哪个请求,都会获得该项目列出的所有月份的数据。然后对同一项目的第二次请求将等待第一次请求的结果。
例如:
对于第1项, 如果首先调用JAN 2016列中的UDF,它将为ITEM 1的所有月份请求数据,然后将该数据存储在某处以供其他请求使用。
然后当第二个请求到来时(让我们说2016年3月是下一个),UDF将等待2016年1月的UDF结果。这样,2016年3月的UDF将不必再启动另一个连接到服务器。
但是,我不知道如何实现这一点。我听说过关键字await和async,但没有使用它们的经验。
也欢迎任何其他问题的解决方案。
答案 0 :(得分:0)
异步调用不会帮助您减少呼叫次数,它只会启动更多并行呼叫。通话次数是否会导致您出现问题?也许是最佳实践"在这里帮助你:C# Data Connections Best Practice?
答案 1 :(得分:0)
异步功能和批处理可以帮助您。基本上,您会在短时间内(例如半秒)收集您想要对后端发出的所有请求,然后向后端发出一个呼叫。当结果返回时,您将为每个请求完成异步调用。
此Gist完全实现了异步和批处理部分,您只需提供批处理评估功能:https://gist.github.com/govert/1bf0a1026ec3aaee19a8
对于此示例的任何后续问题,Excel-DNA Google小组可能更好。