2013-10-10 43 views
0

我需要一些建議,我正在做一些需要很長時間才能運行的事情。webrequest c#million記錄

  1. 我有約100000條記錄在數據庫中有一個日期列。這需要更新。
  2. 這是通過調用每個記錄的URL並獲取日期並更新它來完成的。
  3. 現在,我寫了C#代碼,一次選擇1000條記錄。

代碼:

WebRequest wr = WebRequest.Create(inputURL); 
HttpWebResponse response = (HttpWebResponse)wr.GetResponse(); 

// Get the stream containing content returned by the server. 
Stream dataStream = response.GetResponseStream(); 

// Read the content. 
StreamReader reader = new StreamReader(dataStream); 

string responseString = reader.ReadToEnd(); 

的響應是JSON的形式,所以在使用Jsonserializer我得到的日期。 然後我一次更新一條記錄。

現在,這需要很長時間。我怎樣才能提高這個性能?

+0

您是否可以直接訪問服務器?你可以在服務器上運行一個應用程序而不需要中間的Web請求嗎?直接訪問數據庫怎麼樣? –

+0

每個網址/請求只能獲得一個項目嗎? –

+0

五月'壓縮'幫助? –

回答

-1

您可以同時打開許多URL到服務器。一個簡單的方法是調用使用TPL(任務並行庫)在.NET這種方法(V4和更高的我想,也許3.5)

List<string> Urls = GetMyList(); 
System.Threading.Tasks.Parallel.ForEach(Urls, u=>Doit(u)); 

例如,看看答案在這裏:Parallel Extensions

您可以限制同時處於活動狀態的線程數量。

+0

我有串sqlSel = @一公開數據從「選擇MYTBL千家ID,其中SDATE爲空」。 SqlCommand cmdSel = new SqlCommand(sqlSel,conn_string); SqlDataReader reader1 = cmdSel.ExecuteReader(); while(reader1.Read()){ID = reader1 [0] .ToString(); string inputURL =「http://www.test.com/」+ ID +「.json」; WebRequest wr = WebRequest.Create(inputURL); HttpWebResponse響應=(HttpWebResponse)wr.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); 串responseString = reader.ReadToEnd();如何使用TPL – user2726975

0

你可以使用SSMS或其他方法執行sql嗎?您還沒有指定用於更新日期規則,但如果你有一個真正簡單的情況下,說加10天每次約會,你可以執行,隨着以毫秒爲單位一行代碼,即

update mytable set mydate = dateadd(day, 10, mydate) ...voila. 

即使如果你有更復雜的更新規則,你可能最好通過sql來做這件事,而不是通過webrequest一次記錄...

更新日期的規則是什麼?

+0

我可以從一個JSON請求一個日期。所以如果我需要更新10000,我需要10000個這樣的請求和更新 – user2726975