1

私はasp.netMvc-3C#を使用して求人広告Webアプリケーションに取り組んでいます。

すべての広告は、facebook、twitter、google plus、linkedinなどのソーシャルメディアで共有できます。

これらのウェブサイトで広告が共有される回数を計算し、このレコードをデータベースに保存しています。

この機能の使用

 string jsonString = new System.Net.WebClient().DownloadString(URL-of-ad);
 var serialize= new System.Web.Script.Serialization.JavaScriptSerializer();
 var dictionary = serialize.Deserialize<Dictionary<string, string>>(jsonString);
 var twitter = dict["count"];
 var facebook= dict["share_count"];

// calculating for other website by this function

これは正常に機能している関数ですが、すべての広告に対して非常に時間がかかります。私は何千もの広告を持っているので、何千もの時間をループして、すべての広告に対してこの関数を呼び出す必要があります。

この関数を1日に2回呼び出しています。

このタスクを実行するための他のより良いそして速い方法はありますか?

提案をお願いします。

4

2 に答える 2

1

あなたはあなたのデザインを改善することを考えるかもしれません

1-Windowsサービスを作成し、1日2回実行するように設定します。おそらく、サイトのトラフィックが非常に少ない場合を把握します。

2-共有カウントロジックをWindowsサービスに移動します。これにより、別のプロセスでそれが実行され、メインアプリケーションが解放されます。

3-ネットワーク速度に依存するものをダウンロードするので、yopurのダウンロードを同期ではなく非同期にします。

于 2013-03-22T07:25:44.023 に答える
1

いくつかの提案:

  1. これを並行して実行します。たとえば、を使用して、追加のURLを渡すか、 DownloadStringAsyncParrallel.ForEachなどの非同期バージョンを渡します。両方が同時に複数のダウンロードを実行します。
  2. 追加を示すページがロードされたときにこれを実行します。追加をロードしてから、サーバーに対してWebサービス呼び出しを実行して、およびを取得しcountますshare_count。少し手間がかかるかもしれませんが、より最新のものになり、各追加がめったに表示されない場合は、これがより効率的である可能性があります。

ページの作成中にこれを実行していないと思いますが、実行している場合は、Saurabhが提案するように、別のサービスまたはプロセスに移動してください。

于 2013-03-22T07:28:41.150 に答える