性能比较好的单例写法

2019/10/27, .Net c#代码片段

摘要:一种性能比较好的单例写法
参考来源

其他单例思路:
1.使用依赖注入,注册为单例模式
2.使用双重锁机制

public sealed class SingletonBase//应该使用密封类防止派生
{
    //写单例的方法
    //public string Getxxx(){ }
    private SingletonBase()
    {
    }

    public static SingletonBase Instance
    {
        get
        {
            return Nested.instance;
        }
    }
    private class Nested
    {
        //显式静态构造函数
        // not to mark type as beforefieldinit
        static Nested()
        {
        }

        internal static readonly SingletonBase instance = new SingletonBase();
    }
}

原文地址:https://www.cnblogs.com/kasnti/p/11748198.html

时间: 2024-11-18 13:48:58

性能比较好的单例写法的相关文章

单例写法 转

如何正确地写出单例模式 1.懒汉式,线程不安全 这段代码简单明了,而且使用了懒加载模式,但是却存在致命的问题.当有多个线程并行调用 getInstance() 的时候,就会创建多个实例.也就是说在多线程下不能正常工作 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == nu

有一鲜为人知的单例写法-ThreadLocal

还有一鲜为人知的单例写法-ThreadLocal 源码范例 当我阅读FocusFinder和Choreographer的时候,我发现这两类的单例实现和我们平常用双重检查锁很不一样.而是用来一个ThreadLocal,这个也可以实现单例啊,那这个与双重检查锁实现的单例有什么区别呢? 1.FocusFinder /** * The algorithm used for finding the next focusable view in a given direction * from a view

Egret中的三种单例写法

1 普通的单例写法 class Single{ private static instance:Single; public static getInstance():Single{ if(this.instance == null){ this.instance = new Single(); } return this.instance; } public run(){ } } Single.getInstance().run(); 2 Module写法.仿照的Egret中Res资源类写法.

另一鲜为人知的单例写法-ThreadLocal

另一鲜为人知的单例写法-ThreadLocal 源代码范例 当我阅读FocusFinder和Choreographer的时候,我发现这两类的单例实现和我们寻经常使用双重检查锁非常不一样.而是用来一个ThreadLocal.这个也能够实现单例啊,那这个与双重检查锁实现的单例有什么差别呢? 1.FocusFinder /** * The algorithm used for finding the next focusable view in a given direction * from a v

iOS单例写法简析

官方文档这样写的: static AccountManager *DefaultManager = nil; + (AccountManager *)defaultManager { if (!DefaultManager) DefaultManager = [[self allocWithZone:NULL] init]; return DefaultManager; } 在iOS4之后有了另外一种写法: + (AccountManager *)sharedManager { static A

使用单例时的三种单例写法

单例:一个类只有一个实例,在外部创建对象时,不能用alloc.(只要alloc,就会在堆区开辟空间,就意味着有多个对象)所以我们要提供一个创建对象的方法: 1.加号方法 2.返回值类型为当前类 3.方法名以default ,standared,main,shared等开头 + 当前类名 下面以Person类为例 在.h文件中声明 + (Person *)sharePerson; 在.m文件实现 第一种模式(单线程使用这种模式) + (Person *)sharePerson { 声明为stati

Unity 单例写法

https://www.cnblogs.com/SHOR/p/5192046.html 借鉴自:http://www.cnblogs.com/CodeCabin/p/unity_global_manager.html 实现复杂一些的全局控制,如切换游戏关卡等操作,更常用的方式是使用单例类.单例类的实现又分为两种: 继承自MonoBehaviour的单例类 纯C#的单例类 前者的优点是: 可以在Inspector中显示,便于赋值和查看变量等: 可以利用MonoBehaviour的接口: 可以使用C

我喜欢的两种单例写法

1,第一种: 1 package ToolPackage 2 { 3 /** 4 * 提示 5 * @author tqr <br /> 6 * 创建时间:2014-11-7 下午6:27:10 7 */ 8 public class Tip 9 { 10 private static var instanceB:Boolean=true; 11 private static var instance:Tip; 12 13 public function Tip() 14 { 15 if (i

ios 线程安全单例写法

#import "DemoObj.h" @implementation DemoObj static DemoObj *instance; /** 1. 重写allocWithZone,用dispatch_once实例化一个静态变量 2. 写一个+sharedXXX方便其他类调用 */ // 在iOS中,所有对象的内存空间的分配,最终都会调用allocWithZone方法 // 如果要做单例,需要重写此方法 // GCD提供了一个方法,专门用来创建单例的 + (id)allocWith