2017-06-20 2 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呼び出しを作成したい場合にも、非同期呼び出しが正常に動作する必要があります。呼び出しを待つことは、共有リソースが準備できるまでブロックされます。

(私は十分に担当者を持っていた場合はコメントとして投稿しているだろう)

関連する問題