日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谨慎设计一个单例类

發(fā)布時間:2023/11/29 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谨慎设计一个单例类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?? 如果設(shè)計成一個單例類,雖然不存在對象頻繁回收,可要長期占用資源。而且意味著外面對多線程,到了這里需要排隊進入。什么時間設(shè)計成單例呢?設(shè)計一個單例就意味著, 我們存在資源競爭,必須的,二,我們要頻繁創(chuàng)建對象,銷毀對象(一般最多可見Utility)。資源競爭我們用在數(shù)據(jù)庫操作,文件操作,隊列,靜態(tài)變量。但像上面說的,設(shè)計一個單例,問題很多,因為我們設(shè)計的想法,就是通用性。處了上面的情況,非必須最好不設(shè)計單例模式(效率問題),最佳的方式,讓調(diào)用者根據(jù)使用情況單例化被調(diào)用者。好處是,一,延遲加載了使用時間,二、可以被調(diào)用者的銷毀而回收。在設(shè)計單例時,我們要分析效率,我們經(jīng)常設(shè)計的單例方式

?

public class VFactory{private static VFactory instance = null;private static object threadSafeLocker = new object();public void Read(){}public void Write(){}public static VFactory Instance{get{if (null == instance){lock (threadSafeLocker){if (null == instance){instance = new VFactory;}}}return instance;}}}


很典型的單例,可問題很多,效率不高,所有線程在進入的時候,都需要排隊,如果一個線程是要執(zhí)行Read 而另一個要執(zhí)行Write ,實際的情況我們大部門時間(一個共享變量或隊例,不會改變)在浪費時間,read的時機我們不需要加鎖,而僅僅Write時,所以設(shè)計一個靜態(tài)方法,不是更好嗎?而且如果是單例,那你必須小心操作它內(nèi)部的變量不僅是Static 變量,private、 protected 也必須小心,如果不加鎖,也是會出錯誤的。最好辦法,讓它的調(diào)用者控制,調(diào)用者如果是N個線程,那這N個線程都會指向一個單例地址Copy ,而在調(diào)用者內(nèi),都存在N份單例的內(nèi)部變量。

??? 總結(jié):非必須不設(shè)計單例模式,(.net 回收很快的) ,讀寫同時存在時,設(shè)計靜態(tài)方法。讓調(diào)者考慮實例方式。

????

轉(zhuǎn)載于:https://www.cnblogs.com/shouhongxiao/p/3530091.html

總結(jié)

以上是生活随笔為你收集整理的谨慎设计一个单例类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。