我将在我运行的网站上为捐款页面做一个进度条。我只希望进度条每天更新一次,而不是像往常一样每次更新页面。
我有什么选项可以获取捐赠的当前SUM并将其放在一个平面文本文件中以供aspx页面读取而不是每次都查询数据库。?
希望这是有道理的。
答案 0 :(得分:3)
另一种选择是使用缓存并将缓存设置为每24小时才过期一次。然后将数据拉出并放入缓存中,并且整天提供缓存版本。
答案 1 :(得分:1)
我每次都会在数据库上运行一个SUM查询。除非您预计每天会有数百万行插入,否则这将是一个可以忽略不计的性能影响。 (提供数据库表索引)
答案 2 :(得分:1)
为什么不实施Cache并在24小时内过期?这是一个更好的解决方案,也有助于提高性能: - )
HTH
答案 3 :(得分:1)
首先:这种类型的查询非常快;除非你有一些你没有提到的原因,只要让页面在每次加载时都查询数据库。现在很多人似乎主张避免往返数据库。但是,SQL Server 非常快,这种事情对您的应用程序性能几乎没有影响。此外,我很喜欢尽可能显示准确的数据 - 而不是可能24小时过时的数据。
如果你坚持这样做,你有几个选择。
创建一个VBScript或(首选)PowerShell脚本,用于查询数据库并将结果转储到附加到您网站的虚拟文件夹中的aspx,ascx或HTML文件。将脚本设置为在Web服务器(或脚本服务器,如果有)上作为计划任务运行。
对Windows服务执行相同操作。这对此可能有点过头了。当您需要监听远程连接等服务时,服务很棒,但是为了定期运行任务,内置调度程序工作得很好。
您生成的文件可能已包含格式化的HTML。您的ASP.NET页面将其包含为用户控件或部分视图。如果您正在使用MVC,则可以使用脚本中的Razor格式化输出。
同样,我认为这是一个坏主意,并创造了不必要的工作。除非你有充分的理由避免命中数据库,否则不要走这条路。
答案 4 :(得分:0)
如果您希望每天运行一次,那么任务计划程序是您最好的选择。让它运行查询并将结果粘贴到您的网站可以读取的地方。
下一个选项是使用缓存。让代码检查值是否在缓存中。如果是,请使用它。如果不是,请运行查询并填充缓存。将缓存设置为24小时后过期。这个问题的问题是,在繁忙的网站上查询可能会运行一次以上(缓存过期后会有多个请求进入,但是在第一个请求再次填充之前),但这可能对查询没有影响不用多久。
答案 5 :(得分:0)
尝试搜索ASP.NET全局缓存示例。设置两个变量,一个用于查询结果,另一个用于查询执行的DateTime。检查代码是否DateTime.Now - 缓存中的日期是> 24小时 - >再次更新(或类似的东西)
如果您在某个班级中有静态变量,则整个网络应用中都会显示该变量
答案 6 :(得分:0)
我会说要使用缓存。作为对其他缓存答案的增强,您可以使用某些代码来实现缓存,以便缓存在每天的同一时间到期,而不是在第一次访问后的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;
}
}