一个简单的PV统计例子,演示如何利用内存缓冲高并发环境下的计数
在cnblogs博问中回答问题http://space.cnblogs.com/q/15717/,特做了个小例子,希望能够帮助新手朋友们扩宽思路

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
当前临时列表中有 <%=计数器.计数器实例.临时保存访问列表.Count %> 条记录等待着往数据库里插。
</div>
</form>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
当前临时列表中有 <%=计数器.计数器实例.临时保存访问列表.Count %> 条记录等待着往数据库里插。
</div>
</form>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
计数器.计数器实例.临时保存访问列表.Add(Request.UserHostAddress);
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
计数器.计数器实例.临时保存访问列表.Add(Request.UserHostAddress);
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Threading;
using System.Diagnostics;
/// <summary>
///计数器 的摘要说明
/// </summary>
public class 计数器
{
public static readonly 计数器 计数器实例 = new 计数器();
/// <summary>
/// 用来临时保存访问者的IP列表
/// </summary>
public List<string> 临时保存访问列表;
private 计数器()
{
临时保存访问列表 = new List<string>();
Thread 数据插入线程 = new Thread(
() =>
{
while (true)
{
//1.把ipList中的数据一次性插入数据库;自己来根据情况实现
//数据库.插入(临时保存访问列表);
Debug.Print("往数据库中插入了"+临时保存访问列表.Count().ToString()+"条记录");
//2.插入完成后清空ipList
//在并发太多的情况下要根据情况清空列表,以免丢失数据。
临时保存访问列表.Clear();
//3.每隔10秒钟循环一次
Thread.Sleep(10000);
}
}
);
数据插入线程.Start();
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Threading;
using System.Diagnostics;
/// <summary>
///计数器 的摘要说明
/// </summary>
public class 计数器
{
public static readonly 计数器 计数器实例 = new 计数器();
/// <summary>
/// 用来临时保存访问者的IP列表
/// </summary>
public List<string> 临时保存访问列表;
private 计数器()
{
临时保存访问列表 = new List<string>();
Thread 数据插入线程 = new Thread(
() =>
{
while (true)
{
//1.把ipList中的数据一次性插入数据库;自己来根据情况实现
//数据库.插入(临时保存访问列表);
Debug.Print("往数据库中插入了"+临时保存访问列表.Count().ToString()+"条记录");
//2.插入完成后清空ipList
//在并发太多的情况下要根据情况清空列表,以免丢失数据。
临时保存访问列表.Clear();
//3.每隔10秒钟循环一次
Thread.Sleep(10000);
}
}
);
数据插入线程.Start();
}
}
分类:
08. Common Lib
标签:
ASP.NET
, Performance
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2008-07-13 客户端访问WebService的WSDL文件