C#中缓存的基本使用方法

 


作者:@大木瓜
本文为作者原创,转载请注明出处:https://www.cnblogs.com/damugua/p/16444174.html


C#中缓存的基本使用方法

实现目的:窗体打开时只访问一次数据库,将查询的结果存放在程序缓存中,此后员工每次操作时只与缓存做对比,不与数据库做对比,以此来减少数据库开销。

 

 

复制代码
    public partial class Form1 : Form
    {
        string result = ""; //定义一个全局接收变量

        public Form1()
        {
            InitializeComponent();
            GetCampusById();
            textBox2.Text = Convert.ToString(DateTime.Now);
        }

        /// <summary>
        /// 调用sql查询数据
        /// </summary>
        /// <returns></returns>
        public string GetCampusById()
        {
            string conn = "";
            string sql = "";

            using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
            {
                DataSet ds = new DataSet();
                da.Fill(ds);
                string FPlanNO = ds.Tables[0].Rows[0]["FPlanNO"].ToString();
                string FMakeDate = ds.Tables[0].Rows[0]["FMakeDate"].ToString();
                return FPlanNO;
            }
        }

        /// <summary>
        /// 写入缓存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            string key = textBox4.Text;   //key值
            string value = Convert.ToString(DateTime.Now);   //value值

            //从缓存拿数据,但是每次得输入key和value
            result = cachehelper.getcache<string>(key, value);
            listBox1.Items.Add(key + "  " + DateTime.Now);
        }
        /// <summary>
        /// 对比缓存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            //每次拿输入的值和缓存做对比
            string key = textBox3.Text;   //key值
            string value = Convert.ToString(textBox1.Text);   //key值
            //从缓存拿数据,但是每次得输入key和value
            result = cachehelper.getcache<string>(key, value);
            textBox5.Text = result;
        }
    }
复制代码

再来一个缓存类

复制代码
    /// <summary>
    /// 缓存类
    /// </summary>
    public class cachehelper
    {

        //缓存容器
        private static Dictionary<string, object> cachedictionary = new Dictionary<string, object>();

        /// <summary>
        /// 添加缓存
        /// </summary>
        public static void add(string key, object value)
        {
            cachedictionary.Add(key, value);
        }

        /// <summary>
        /// 获取缓存
        /// </summary>
        public static t get<t>(string key)
        {
            return (t)cachedictionary[key];
        }

        /// <summary>
        /// 判断缓存是否存在
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static bool exsits(string key)
        {
            return cachedictionary.ContainsKey(key);
        }

        /// <summary>
        /// 缓存获取方法
        /// </summary>
        /// <typeparam name="t"></typeparam>
        /// <param name="key">缓存字典容器对应key</param>
        /// <param name="func">委托方法 传入操作对象</param>
        /// <returns></returns>
        public static T getcache<T>(string key, object value)
        {
            if (cachehelper.exsits(key))
            {
                //缓存存在,直接获取原数据
                cachehelper.get<Object>(key);
            }
            else
            {
                //缓存不存在,去生成缓存,并加入容器
                cachehelper.add(key, value);
            }
            return (T)cachehelper.get<Object>(key);
        }


    }
复制代码

 

 欧克,完事

 

参考链接:http://www.cnblogs.com/wangjifeng23/p/9626119.html

posted @   大木瓜  阅读(763)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示