一个简单的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>

 

 

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);
    }
}

 

 

计数器.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();
    }
}

 

 

posted @ 2010-07-13 17:40  LanceZhang  阅读(3048)  评论(13编辑  收藏  举报