小记:利用单例模式的提高系统总体性能

   今天走在路上忽然想起一个问题,以前没有深入的注意到。c#

   问题:若是在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时,咱们估计都须要ide

new PeopleServer();

这时,服务器端的内存中指定堆内就分配了一块内存用于存储新建立的PeopleServer对象,当执行结束时在销毁这个对象,想想若是咱们的服务器会说话,那他确定会这样骂你:尼玛每次建立的对像都同样,并且每次请求还都须要建立,你就不能只建立一个对象,你们的操做时都使用这同一个对象,那不就省事儿多了吗?性能

嘿嘿 懂个人意思了吗?接下来咱们这么设计代码:spa

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该对象信息的一些类的定义也能够这么来弄,懂得原理就可以在往后的项目中随机应变了。orm

再补充一种单例模式的写法:对象

public static PeopleServer GetPeopleServerByCache() {
            object obj = System.Web.HttpRuntime.Cache["PeopleServerCache"];
            if (obj == null)
            {
                obj = new PeopleServer();
                System.Web.HttpRuntime.Cache["PeopleServerCache"] = obj;
            }
            return (PeopleServer)obj;
        }

其实原理都同样。内存


   屌丝的生活就是这样,打烊,睡觉
get



   仍是那句话:欢迎各位大牛拍砖指正,我相信技术没有最牛只有刚牛

相关文章
相关标签/搜索