程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 用單例模式(Singleton)解決文件的讀寫沖突

用單例模式(Singleton)解決文件的讀寫沖突

編輯:.NET實例教程

本人最近的項目中需要用到日志文件,由於對日志文件的讀寫可能比較頻繁, 為了克服讀寫沖突,我們在設計中引入了Singleton模式。

首先,設計日志文件對象,包括Open和Save方法:



    [Serializable]
    public class LogDocument
    ...{
        /**//// <summary>
        /// 從日志文件中得到LogDocument對象
        /// </summary>

        public LogDocument Open(string fileName)
        ...{
        }

        /**//// <summary>
        /// 寫日志文件
        /// </summary>

        public void Save(string fileName)
        ...{
            File.WriteAllText(fileName, GetXML());
        }
    }

 

再設計LogHandler類,用來讀寫日志文件:



    /**//// <summary>
    /// 日志文件處理類
    /// </summary>

    public class LogHandler
    ...{

        private LogHandler()...{}

        private static LogHandler instance = new LogHandler();

        public static LogHandler Instance
        ...{
            get
            ...{
                if (instance == null)
                ...{
                    instance = new LogHandler();
                }
                return instance;
            }
        }

        /**//// <summary>
        /// 寫入日志
        /// </summary>

        public void Write()
        ...{
            lock(Instance)
            ...{
                //寫入日志
            }
        }

       /**//// <summary>
       /// 讀取日志文件
       /// </summary>

        public void Read()
        ...{
            lock(Instance)
            ...{
                // 讀取日志文件
            }
        }
    }

LogHandler采用單例模式,保證了同一時間內只有一個線程對日志文件進行操作,讀/寫方法中分別用Lock互斥鎖鎖定這個唯一的對象,這樣就避免了日志文件的讀寫沖突,具體可參看MSDN對於Lock關鍵字的介紹。當然,C#提供的ReaderWriterLock讀寫鎖也可以解決這一問題。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved