如何在调用API时减少C#中的执行时间
本文关键字:执行时间 调用 API | 更新日期: 2023-09-27 18:20:34
我正在创建一个windows应用程序(使用windows表单应用程序),它调用web服务来获取数据。在数据中,我必须获取200多个客户端的信息,对于每个客户端,我必须提取所有用户的信息。一个客户端可以有50到100个用户。因此,我循环调用web服务(在获得所有客户端列表后),为每个客户端获取用户列表。这是一个漫长的过程。我想减少整个过程的执行时间。因此,请建议我哪种方法可以帮助减少执行时间,目前一次数据提取的执行时间高达40-50分钟。让我知道任何解决方案,如多线程或其他任何东西,以最适合我的应用程序为准。
提前谢谢。
如果您控制web服务,请使用一个同时返回所有客户端的方法,而不是像Michael建议的那样一个接一个地返回以避免rountrips。
如果没有,请确保在同一时间(不是按顺序)发出尽可能多的请求,以避免尽可能晚。对于每个请求,你将至少有1个rountrip(因此至少你的ping延迟值),如果你提出150个请求,那么你将把你的ping发送到服务器X 150"只是在网络上等待"。如果您将这些请求分成4个束,并并行处理每个束,那么您只需要等待150/4*ping时间。因此,同时执行的请求越多,等待的时间就越短。
我建议您避免为每个用户循环调用服务以获取详细信息,而是在服务器中进行循环并一次性返回所有数据,否则您将遭受由数千次调用引起的大量无用延迟,而不仅仅是因为服务器时间或数据传输时间。
这也是一种模式,称为远程立面或立面模式,由马丁·福勒和四人帮解释:
任何打算用作远程对象的对象都需要一个粗粒度的接口,该接口可以最大限度地减少完成某些任务所需的调用次数[…]您需要在一次调用中访问和更新订单和订单行,而不是单独请求订单及其订单行。
如果您无法控制web服务,您可以尝试使用Parallel.ForEach循环而不是ForEach环路来查询web服务。
MSDN有一个关于如何使用它的教程:http://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx