我有IIS7.5。我們目前對我們網站上的實體擁有加權評級。計算加權等級的速度非常慢,因此加載主頁現在需要超過10秒才能加載。IIS7是否可以讓它每5分鐘運行一次網頁?
爲了解決這個問題,我想將權重存儲在每個實體的數據庫中,並讓IIS每5-10分鐘運行一次腳本以重新計算權重。
我該如何去做這件事?如果它運行網頁網址,對我來說最簡單。
我有IIS7.5。我們目前對我們網站上的實體擁有加權評級。計算加權等級的速度非常慢,因此加載主頁現在需要超過10秒才能加載。IIS7是否可以讓它每5分鐘運行一次網頁?
爲了解決這個問題,我想將權重存儲在每個實體的數據庫中,並讓IIS每5-10分鐘運行一次腳本以重新計算權重。
我該如何去做這件事?如果它運行網頁網址,對我來說最簡單。
不想要使用的客戶端,僅服務器不斷調用此功能,您可以在服務器上創建一個線程調用的函數計算它。
啓動線程或計時器的更好方法是在Global中。ASAX,像這樣的例子:
public class Global : System.Web.HttpApplication
{
private Timer _timer;
void Application_Start(object sender, EventArgs e)
{
int period = 1000 * 60 * 10; // 10 minutes
_timer = new Timer(TimerCallback, null, 1000, period);
}
private void TimerCallback(object state)
{
// Do your stuff here
}
}
}
謝謝,這看起來最簡單。我對Global.asax不太熟悉,我會假設這會使用客戶端請求來處理,但是哪個會偶爾會導致一個客戶端長時間加載頁面? – 2011-12-29 18:36:17
我有這個問題,Timer()不允許帶4個參數的構造函數。我在ASP.net 4.0上。然而,我發現這個(http://www.mikesdotnetting.com/Article/129/Simple-task-Scheduling-using-Global.asax),它可以使用非常類似的東西,我可以使用 – 2011-12-29 18:41:17
使用System.Threading.Timer 。有一個System.Timers.Timer,但有其他用法。 – LawfulHacker 2011-12-29 18:59:28
您可以使用Cache
條目進行此設置,將來設置爲過期10分鐘。
當您添加該項目時,請使用CacheItemRemovedCallback
參數的回調函數 - 在此回調函數中執行您的數據庫並重新添加到期的緩存條目。
其他選項包括:
Windows服務和時間表任務仍然需要您有某種方法將結果傳遞給IIS。
謝謝,不要太熱衷於緩存,儘管這個過程會變得越來越慢,我不想讓訪問者偶爾有長時間的頁面加載。 – 2011-12-29 18:35:05
@TomGullen - 不知道爲什麼會有任何方位?緩存條目僅作爲使用Web命名空間的「計時器」 - 僅用於觸發將計算內容的回調。它可以包含垃圾(比如'null'),不能在任何地方使用。由於它使用回調,因此它將使用單獨的線程,並且不會對任何用戶造成任何影響。 – Oded 2011-12-29 18:37:00
哦,好吧!謝謝你,還是新的緩存 – 2011-12-29 18:40:28
一種方法是使用Windows服務,而不是調用Web URL。
然後,它可以在背景中完全帶外運行以執行計算。這個細節在這裏:
http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx
一些優勢包括:
但是,您需要有合理的完全訪問權限才能安裝並運行服務器e服務。
謝謝,現在就看看這個。 – 2011-12-29 18:31:35
當然,還有一些在IIS進程和Web服務之間進行通信的方式。 – Oded 2011-12-29 18:33:15
可能:它可能就像執行計算並將它們寫入某個表格一樣簡單。 – 2011-12-29 18:47:11
一個簡單的WGET或類似的批處理文件,以及來自計劃任務的幫助將做到這一點。
http://www.gnu.org/software/wget/
你可以試試這個來測試這個想法:
wget http://localhost/filename.ashx
我做了這樣的事情早些時候我已經使用Windows的計劃任務,把我的腳本在特定的時間間隔。
該怎麼做?後臺工作? – Aristos 2011-12-29 18:28:53
@Aristos yes如何讓服務器每隔10分鐘運行一次 – 2011-12-29 18:31:58