一个简单的PV统计例子,演示如何利用内存缓冲高并发环境下的计数
在cnblogs博问中回答问题http://space.cnblogs.com/q/15717/,特做了个小例子,希望能够帮助新手朋友们扩宽思路
Default.aspx
<%@ 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>
Default.aspx.cs
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);
}
}
计数器.cs
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();
}
}