ASP.NET应用程序状态 - 每分钟创建一次"请求"计数器

时间:2014-09-19 16:19:43

标签: c# asp.net vb.net counter state

这一定很容易,但我的大脑拒绝解决这个问题。

在ASP.net中,可以直接使用应用程序状态创建全局“页面请求计数器”。只需增加一个应用程序变量:

Application("Hitcount") = Application("HitCount") + 1 

或其他什么。但是,我如何仅测量过去一分钟内收到的点击数?我需要在过去的60秒内持续计算应用程序命中数,以便我能够对传入的请求进行一些流量管理。例如。如果当前负载超过每分钟1,000次点击,则重定向到某处。

2 个答案:

答案 0 :(得分:2)

最好使用日志分析工具,使用更宽的时间窗口分析请求日志,从而为您提供这些统计信息。有一些非常好的,可让您在历史观看时间窗口之间切换,并查看一天,一周,一个月的高峰流量。

我建议您不要将匹配记录插入数据库,除非您的站点数量很少。避免将请求延迟与数据库绑定,除非您确定性能开销在允许的容差范围内。仪器应该尽量不影响它测量的服务器,除了非常轻微的开销,这就是为什么事后运行良好的日志分析。

第一项业务是调整IIS以添加一些非默认字段,这些字段是标准W3C日志记录格式的一部分。

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/676400bc-8969-4aa7-851a-9319490a9bbb.mspx?mfr=true

IIS Logging

配置这些高级字段的一种方法是通过IIS管理器,在>下;记录日志记录 - >选择字段

需要字节recvd / sent和timespent等字段才能使用其中一个第三方分析器来获得好的图表。

答案 1 :(得分:2)

您可以使用内存缓存执行此操作。这将计算超过10分钟的滚动请求计数。但是我还没有测试过它的性能。

public BaseController() : base() 
{
    CacheItemPolicy policy = new CacheItemPolicy();
    policy.AbsoluteExpiration = DateTime.UtcNow.AddMinutes(10);

    MemoryCache.Default.Add(Guid.NewGuid(), "RequestCount", policy);
}

public int RequestCountPerMinute
{
    get
    {
        return MemoryCache.Default
           .Where(kv => kv.Value.ToString() == "RequestCount").Count() / 10;
    }
}