0

我有 IIS7.5。我们目前对我们网站上的实体进行加权评级。计算加权评分非常慢,以至于加载主页现在需要 10 多秒才能加载。

为了解决这个问题,我想将权重与每个实体一起存储在数据库中,并让 IIS 每 5-10 分钟运行一次脚本来重新计算权重。

我该怎么做呢?如果它运行网页 URL,对我来说将是最简单的。

4

5 回答 5

3

您可以Cache为此使用一个条目,设置为在未来 10 分钟后过期。

添加项目时,为CacheItemRemovedCallback参数使用回调函数 - 在此回调函数中,您的数据库工作并重新添加过期缓存条目。

其他选项包括:

Windows 服务和计划任务仍然需要您通过某种方式将结果传达给 IIS。

于 2011-12-29T18:28:48.317 回答
3

一种方法是为此使用 Windows 服务,而不是调用 Web URL。

然后,这可以在后台完全带外运行以执行计算。这方面的详细信息在这里:

http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx

一些优点包括:

  • 您的 IIS 进程不会受到影响,因此您的用户不会看到减速
  • 该服务可以独立于网站停止或启动

但是,您需要对服务器具有合理的完全访问权限才能安装和运行该服务。

于 2011-12-29T18:29:12.230 回答
2

不使用客户端,只有服务器不断调用这个函数,你可以在服务器上创建一个线程来调用计算它的函数。

启动线程或计时器的更好方法是在 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
    }
}

}

于 2011-12-29T18:32:09.030 回答
0

我之前做过类似的事情,我曾使用 Windows 计划任务在特定时间间隔调用我的脚本。

于 2011-12-29T21:02:19.387 回答
-1

一个简单的带有 WGET 或类似文件的批处理文件,以及计划任务的帮助就可以完成。

http://www.gnu.org/software/wget/

你可以试试这个来测试这个想法:

wget http://localhost/filename.ashx
于 2011-12-29T18:30:17.443 回答