静态数据管理

本文介绍了一个用于.NET和C#环境下的ViewState管理器类。该类旨在解决Ajax应用中ViewState信息丢失的问题,并提供了一种替代Session的方法,以避免Session超时带来的性能影响。通过使用ViewState管理器,开发者能够更有效地管理和维护页面状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个静态数据管理类,实现了ViewState(Ajax中常常丢失信息)和Session(可能超时,TimeOut设太长会影响性能)。结合前面说的监视线程可以集中管理服务器所需的数据,进而可以根据服务器的当前性能自发调整操作。
    环境:.NET,C#
    /// <summary>
    /// 页面状态类
    /// </summary>
    public class ViewStateOpt
    {
        public class ViewStateEx
        {
            public class ____Data____
            {
                public string name;
                public object value;
                public bool isImportant;
                public ____Data____(string keyName, object keyValue, bool isPub)
                {
                    this.name = keyName;
                    this.value = keyValue;
                    this.isImportant = isPub;
                }
            }
            public string sessionId;
            private IList<____Data____> viewStateData;
            /// <summary>
            /// 当前状态变量数,只读
            /// </summary>
            public int DataNumber
            {
                get { return viewStateData.Count; }
            }
            /// <summary>
            ///构造函数
            /// </summary>
            public ViewStateEx(string sessionId)
            {
                this.sessionId = sessionId;
                this.viewStateData = new List<____Data____>();
            }
            /// <summary>
            ///访问状态变量
            /// </summary>
            public object this[string keyName]
            {
                get
                {
                    foreach (____Data____ data in viewStateData)
                    {
                        if (data.name == keyName.Trim())
                            return data.value;
                    }
                    return null;
                }
                set
                {
                    foreach (____Data____ data in viewStateData)
                    {
                        if (data.name == keyName.Trim())
                        {
                            data.value = value;
                            return;
                        }
                    }
                    viewStateData.Add(new ____Data____(keyName, value, false));
                }
            }
            /// <summary>
            /// 增加一个状态变量
            /// 可以指定为全局变量
            /// </summary>
            public void Add(string keyName, object keyValue, bool isPub)
            {
                viewStateData.Add(new ____Data____(keyName, keyValue, isPub));
            }
            /// <summary>
            /// 删除一个状态变量
            /// </summary>
            public bool Delete(string keyName)
            {
                foreach (____Data____ data in viewStateData)
                {
                    if (data.name == keyName)
                    {
                        viewStateData.Remove(data);
                        return true;
                    }
                }
                return false;
            }
            /// <summary>
            /// 清除所有临时状态变量
            /// </summary>
            public int Clear()
            {
                int num = 0;
                for (int i = 0; i < viewStateData.Count; )
                {
                    if (viewStateData.isImportant == false)
                    {
                        viewStateData.RemoveAt(i);
                        num++;
                    }
                    else
                        i++;
                }
                return num;
            }
            /// <summary>
            /// 清除所有状态变量
            /// </summary>
            public int ClearAll()
            {
                int num = 0;
                num = viewStateData.Count;
                viewStateData.Clear();
                return num;
            }
        }
        static protected int objectNumber = 0;
        private IList<ViewStateEx> sessionData;
        /// <summary>
        /// 当前已创建的实例数,只读
        /// </summary>
        public int ObjectNumber
        {
            get { return objectNumber; }
        }
        /// <summary>
        /// 当前会话数,只读
        /// </summary>
        public int SessionNumber
        {
            get { return sessionData.Count; }
        }
        /// <summary>
        /// 会话变量数
        /// </summary>
        public int viewStateNum(int index)
        {
            if (index >= SessionNumber)
                return -1;
            return sessionData[index].DataNumber;
        }
        /// <summary>
        /// 默认构造函数
        /// </summary>
        public ViewStateOpt()
        {
            sessionData = new List<ViewStateEx>();
            objectNumber++;
        }
        /// <summary>
        ///访问当前会话状态变量
        /// </summary>
        public object this[string keyName]
        {
            get
            {
                ViewStateEx inData = CurrentViewState();
                if (inData == null)
                    return null;
                return inData[keyName];
            }
            set
            {
                ViewStateEx inData = CurrentViewState();
                if (inData == null)
                {
                    inData = new ViewStateEx(new SessionIDManager().GetSessionID(HttpContext.Current));
                    sessionData.Add(inData);
                }
                inData[keyName] = value;
            }
        }
        /// <summary>
        /// 增加一个当前会话的状态变量
        /// 可以指定为全局变量
        /// </summary>
        public void Add(string keyName, object keyValue, bool isPub)
        {
            ViewStateEx inData = CurrentViewState();
            if (inData == null)
            {
                inData = new ViewStateEx(new SessionIDManager().GetSessionID(HttpContext.Current));
                sessionData.Add(inData);
            }
            inData.Add(keyName, keyValue, isPub);
        }
        /// <summary>
        /// 删除当前会话的一个状态变量
        /// </summary>
        public bool Delete(string keyName)
        {
            ViewStateEx inData = CurrentViewState();
            if (inData == null)
                return false;
            return inData.Delete(keyName);
        }
        /// <summary>
        /// 清除当前会话的所有临时状态变量
        /// </summary>
        public int Clear()
        {
            ViewStateEx inData = CurrentViewState();
            if (inData == null)
                return 0;
            return inData.Clear();
        }
        /// <summary>
        /// 删除指定会话及其所有变量
        /// </summary>
        public int DelViewState(string sessionId)
        {
            int num = 0;
            sessionId = sessionId.Trim();
            foreach (ViewStateEx data in sessionData)
            {
                if (data.sessionId == sessionId)
                {
                    num = data.ClearAll() + 1;
                    sessionData.Remove(data);
                    break;
                }
            }
            return num;
        }
        /// <summary>
        /// 获取当前会话的所有状态变量
        /// </summary>
        private ViewStateEx CurrentViewState()
        {
            foreach (ViewStateEx data in sessionData)
            {
                if (data.sessionId == new SessionIDManager().GetSessionID(HttpContext.Current))
                    return data;
            }
            return null;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值