程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .Net中利用單例模式的提升系統整體性能

.Net中利用單例模式的提升系統整體性能

編輯:關於.NET

今天走在路上突然想起一個問題,之前沒有深刻的注意到。

問題:如果在WebForm頁面周期中如果 一個對象頻繁創建,請求結束後又進行銷毀肯定會對系統產生一定的性能影響,我們都知道,當我們每次new 一個對象時,其都在內存中指定的堆上分配一塊空間,那麼創建這個對象然後銷毀(Response.End()執行後) 這個對象肯定要消耗服務器的時間及空間(尤其是並行請求數量很大的時候,撐破內存也不是不可能),因為 每個請求都會建這個對象。然後大家有沒有注意到,有些類可能是這樣的,舉個例子:

public 

class PeopleServer
{
    public PeopleServer() { }
    public string ToStringPeople(People p)
    {
        return string.Format("Name:{0},Age:{1};", p.Name, p.Age);
    }
}
public class People
{
    public string Name { get; set; }
    public int Age { get; set; }
}

那麼當我們每次需要打印People時,我們估計都需要

new PeopleServer();

這時,服務 器端的內存中指定堆內就分配了一塊內存用於存儲新創建的PeopleServer對象,當執行結束時在銷毀這個對象 ,想一想如果我們的服務器會說話,那他肯定會這樣罵你:尼瑪每次創建的對像都一樣,而且每次請求還都需 要創建,你就不能只創建一個對象,大家的操作時都使用這同一個對象,那不就省事兒多了嗎?

嘿嘿 懂我的意思了嗎?接下來我們這麼設計代碼:

public class PeopleServer
{
    private static PeopleServer _people;
    public PeopleServer() { }
    public string ToStringPeople(People p)
    {
        return string.Format("Name:{0},Age:{1};", p.Name, p.Age);
    }
    //該方法必須為靜態的方便其他對象去調用
    public static PeopleServer GetPeopleServer()
    {
        if (_people == null)
        {
            _people = new PeopleServer();
        }
        return _people;
    }
}
public class People
{
    public string Name { get; set; }
    public int Age { get; set; }
}

看到GetPeopleServer這個方法是不是有種恍然大悟的感覺?那麼我們每次去格式化People這個對 象是只需要這麼幾行代碼:

People p = new People() { Age = 23, Name = "tongling" };
PeopleServer pServer = PeopleServer.GetPeopleServer();
pServer.ToStringPeople(p);

減少了內存堆得額外開銷系統當然會更快些,這就是幾天我們要說的 單例模式的應用場景,再比如某些配置數據,也就是對象信息在第一次創建後就不需要改變的只需要Get該對 象信息的一些類的定義也可以這麼來弄,懂得原理就能夠在日後的項目中隨機應變了。

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