首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于行列,线程和并发

2012-07-31 
关于队列,线程和并发新做了一个考勤系统,因为限制了只能在上班前一分钟以内,才能签到考勤,公司人不多,才60

关于队列,线程和并发
新做了一个考勤系统,因为限制了只能在上班前一分钟以内,才能签到考勤,公司人不多,才600来个,可是每次都会在上班签到的时候,卡到不行。
想着用队列来控制,一分钟内的数据插入顺序,先把数据都存入队列,然后同多在Global文件中,添加一个timer,定时去判断队列是否为空,不为空就将数据插入到数据库。

1.考勤分时间段,这个时间段是可变的,所以我的timer只能设置为10分钟就检测一次,是否会太频繁?
2.队列的数据在新增的同时,逻辑在读取队列,线程是否是安全的,怎么控制?
3.600个左右的并发并不大,每天每人至少考勤四次,最多六次,是不是有其他没有注意的地方。数据库为oracle
4.暂时测试阶段,数据库存放在一台主机上,非服务器

从来没有做过,求高人指点,或者有更好的办法?

[解决办法]
额 这个还没有做过。。。。。。
友情帮顶~~
期待楼下解答。。。。
[解决办法]

C# code
using System;using System.Collections.Generic;using System.Windows.Forms;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Text;using System.Drawing;using System.Drawing.Imaging;using System.Drawing.Drawing2D;using System.Diagnostics;using System.Threading;using System.Runtime.InteropServices;namespace WindowsFormsApplication1{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        /// <summary>        /// 锁啊锁        /// </summary>        private ReaderWriterLockSlim _RWLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);        // 打卡队列        Queue<SigninInfo> _SigninQueue = new Queue<SigninInfo>(600);          /// <summary>        /// 打卡签到进入队列        /// </summary>        /// <param name="obj"></param>        private void Singin(Object obj)        {            while (true)            {                _RWLock.EnterWriteLock();                try                {                    SigninInfo entity = new SigninInfo();                    entity.EmployeeID = System.Environment.TickCount;                    entity.SigninTime = System.DateTime.Now;                    _SigninQueue.Enqueue(entity);                }                finally                {                    _RWLock.ExitWriteLock();                    System.Threading.Thread.Sleep(10);                }            }        }        /// <summary>        /// 保存        /// </summary>        /// <param name="obj"></param>        private void Save(Object obj)        {            while (true)            {                _RWLock.EnterReadLock();                try                {                    if (_SigninQueue.Count == 0)                    {                        continue;                    }                    SigninInfo entity = _SigninQueue.Dequeue();                    System.Diagnostics.Debug.WriteLine(String.Format("员工ID={0},打卡时间={1}", entity.EmployeeID, entity.SigninTime));                }                finally                {                    _RWLock.ExitReadLock();                    System.Threading.Thread.Sleep(10);                }            }        }        private void button1_Click(object sender, EventArgs e)        {            ThreadPool.QueueUserWorkItem(new WaitCallback(Singin), null);            ThreadPool.QueueUserWorkItem(new WaitCallback(Save), null);        }    }    /// <summary>    /// 打卡信息    /// </summary>    public struct SigninInfo    {        public Int32 EmployeeID;        public DateTime SigninTime;    }} 

热点排行