我有 IIS7.5。我们目前对我们网站上的实体进行加权评级。计算加权评分非常慢,以至于加载主页现在需要 10 多秒才能加载。
为了解决这个问题,我想将权重与每个实体一起存储在数据库中,并让 IIS 每 5-10 分钟运行一次脚本来重新计算权重。
我该怎么做呢?如果它运行网页 URL,对我来说将是最简单的。
一种方法是为此使用 Windows 服务,而不是调用 Web URL。
然后,这可以在后台完全带外运行以执行计算。这方面的详细信息在这里:
http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx
一些优点包括:
但是,您需要对服务器具有合理的完全访问权限才能安装和运行该服务。
不使用客户端,只有服务器不断调用这个函数,你可以在服务器上创建一个线程来调用计算它的函数。
启动线程或计时器的更好方法是在 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
}
}
}
我之前做过类似的事情,我曾使用 Windows 计划任务在特定时间间隔调用我的脚本。
一个简单的带有 WGET 或类似文件的批处理文件,以及计划任务的帮助就可以完成。
http://www.gnu.org/software/wget/
你可以试试这个来测试这个想法:
wget http://localhost/filename.ashx