2017-06-20 53 views
0

我必須製作一個使用REST API來獲取JIRA問題的c#應用程序。運行該工具後,我獲得了正確的輸出,但顯示輸出需要很長時間。下面是代碼的最大時間部分如何使用REST api優化請求JSON的c#代碼

var client =new WebClient(); 

foreach(dynamic i in jira_keys) 
{ 
issue_id=i.key; 
string rest_api_url="some valid url"+issue_id; 
var jira_response=client.DownloadString(rest_api_url); 

//rest of the processing 
} 

jira_keys是一個JArray。在這之後,每個循環都會處理JSON的一部分。隨着jira_keys數量的增加,這會花費很多時間。由於存在共享變量問題,因此我無法將多線程應用於此。所以請有人建議一些方法來優化這個。

+1

您可以同時運行下載。對於每個jira鍵,例如可以使用['DownloadStringAsync'](https://msdn.microsoft.com/en-us/library/ms144202 \(v = vs.110 \).aspx)。 – cubrr

回答

0

這裏是你如何可以異步讀取從JIRA的響應的示例。

var taskList = new List<Task<string>>(); 
foreach (dynamic i in jira_keys) 
{ 
    issue_id = i.key; 
    string rest_api_url = "some valid url" + issue_id; 
    var jiraDownloadTask = Task.Factory.StartNew(() => client.DownloadString(rest_api_url)); 
    taskList.Add(jiraDownloadTask); 
} 
Task.WaitAll(taskList.ToArray()); 

//access the results 
foreach(var task in taskList) 
{ 
    Console.WriteLine(task.Result); 
} 
1

如果問題與特定項目或其他分組綁定,則可以使用JQL字符串搜索問題。這樣你可以批量分頁並分頁。

https://docs.atlassian.com/jira/REST/cloud/#api/2/search-search

此外,像cubrr在他的評論中說,異步調用應該如果你想多線程API調用正常工作。等待呼叫將阻止,直到共享資源準備就緒。

(本來張貼評論,如果我有足夠的代表處)