c#/ASP.NET/SQL Server-每天运行一次查询

本文关键字:一次 查询 每天 NET ASP SQL Server- 运行 | 更新日期: 2023-09-27 17:58:37

我将在我运行的网站上为捐赠页面创建进度条。我只希望进度条每天更新一次,而不是像往常一样在每次页面加载时更新

我有什么选择可以获取当前的捐款总额,并将其放在一个平面文本文件中供aspx页面读取,而不是每次都查询数据库。?

希望这是有道理的。

c#/ASP.NET/SQL Server-每天运行一次查询

另一个选项是使用缓存,并将缓存设置为每24小时仅过期一次。然后,数据被提取并放置在缓存中,缓存的版本将全天提供。

为什么不实现Cache并使其在24小时内过期?这是一个更好的解决方案,也有助于提高性能:-)

HTH

我每次只会在数据库上运行一个SUM查询。除非您期望每天插入数百万行,否则这将是一个可以忽略的性能打击。(如果您的数据库表已编入索引)

首先:这种类型的查询速度非常快;除非您有什么原因没有提到,只要让页面在每次加载时查询数据库即可。如今,许多人似乎主张避免往返数据库。然而,SQL Server的速度非常快,这类事情几乎不会对应用程序性能产生影响。此外,我喜欢尽可能显示准确的数据,而不是可能24小时过时的数据。

如果你坚持这样做,你有几个选择。

  1. 创建一个VBScript或(首选)PowerShell脚本,用于查询数据库并将结果转储到附加到网站的虚拟文件夹中的aspx、ascx或HTML文件中。将脚本设置为在web服务器(或脚本服务器,如果有)上作为计划任务运行。

  2. 对Windows服务执行相同操作。这可能有些过头了。当您需要监听远程连接等时,服务是很好的,但对于定期运行任务,内置的调度程序运行得很好。

您生成的文件可能已经包含格式化的HTML。您的ASP.NET页面会将其作为用户控件或部分视图包含。如果您使用MVC,您可以在脚本中使用Razor来格式化输出。

再说一遍,我认为这是个坏主意,而且会造成不必要的工作。除非你有充分的理由避免访问数据库,否则不要走这条路。

如果你想让某个东西每天只运行一次,任务调度器是你的最佳选择。让它运行一个查询,并将结果粘贴到你的网站可以读取的地方。

下一个选项是使用缓存。让您的代码检查该值是否在缓存中。如果是,请使用它。如果不是,则运行查询并填充缓存。将缓存设置为24小时后过期。这样做的问题是,查询可能会在繁忙的网站上运行不止一次(在缓存过期后,但在第一个缓存再次填充之前,会有多个请求进入),但对于一个不需要很长时间的查询来说,这可能无关紧要。

  • 尝试搜索ASP.NET全局缓存示例。设置两个变量,一个用于查询结果,另一个用于执行查询的DateTime。如果DateTime.Now-缓存中的日期>24小时->再次更新(或类似的),请检查代码

  • 如果你在某个类中有静态变量,它在整个网络应用中都是可见的

我想使用缓存。作为对其他缓存答案的增强,您可以实现一些代码,使缓存在每天的同一时间到期,而不是在一天中第一次访问后仅24小时。这可以防止在流量分散的情况下出现不稳定的更新时间。截止后的第一个请求将查找该值,并将其保持到下一个截止时间。但是,无论第一个请求何时发生,截止都保持不变。

大致如下:

    int ProgressValue
    {
        get
        {
            int? Value = Cache["ProgressValue"] as int?;
            if (Value == null)
            {
                //Set expiration time to 6 AM tomorrow.
                DateTime ExpTime = DateTime.Now.Date.AddDays(1).AddHours(6);
                Value = GetValueFromDB();
                Cache.Insert("ProgressValue", Value, null, ExpTime, System.Web.Caching.Cache.NoSlidingExpiration);
            }
            return (int)Value;
        }
    }