簡體   English   中英

如何在調用API時減少C#中的執行時間?

[英]How to reduce the execution time in C# while calling an API?

我正在創建一個Windows應用程序(使用Windows窗體應用程序),該應用程序調用Web服務來獲取數據。 在數據中,我必須獲取200多個客戶端信息,並且對於每個客戶端,我必須獲取所有用戶信息。 一個客戶端可以有50到100個用戶。 因此,我正在循環(獲取所有客戶端列表之后)中的Web服務,以使每個客戶端獲取用戶列表。 這是一個漫長的過程。 我想減少整個過程的執行時間。 因此,請建議我哪種方法可以幫助減少執行時間,目前一次獲取數據最多需要40-50分鍾。 讓我知道最適合我的應用程序的任何解決方案,例如多線程或其他任何東西。

提前致謝。

如果您可以控制Web服務,那么有一種方法可以一次返回所有客戶端,而不是一個一個地返回所有客戶端,從而避免邁克爾建議的漫游。

如果沒有,請確保同時(不按順序)發出盡可能多的請求,以避免盡可能多的延遲。 對於每個請求,您將至少有1次往返(因此,至少ping的價值值得延遲),如果發出150個請求,則將ping到服務器X 150價值“僅在網絡上等待”。 如果將這些請求分成4個串,並並行執行每個串,那么您將只等待150/4 * ping時間。 因此,您同時執行的請求越多,等待的時間就越少。

我建議您避免為每個用戶循環調用該服務以獲取詳細信息,而應在服務器中進行該循環並一次性返回所有數據,否則您將遭受許多無用的延遲成千上萬的呼叫,而不僅僅是因為服務器時間或數據傳輸時間。

這也是一種模式,稱為“ 遠程門面”或“ 門面模式”,由Martin Fowler和“四人幫”解釋:

打算用作遠程對象的任何對象都需要一個粗粒度的接口,該接口可以最大限度地減少完成某件事所需的調用次數,而不是單獨要求一個訂單及其訂單行,您需要...在單個調用中訪問和更新訂單和訂單行。

如果您無法控制Web服務,則可以嘗試使用Parallel.ForEach循環而不是ForEach循環來查詢Web服務。

MSDN提供了有關如何使用它的教程: http : //msdn.microsoft.com/zh-cn/library/dd460720(v=vs.110).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM