Visual Basic构建线程安全的Singleton
日期:2007年9月2日 作者: 查看:[大字体 中字体 小字体]-
本文转自博客园,文中内容不代表本站观点,仅提供参考
大抵而言,Singleton 模式应该是设计模式中相当常用的一种了。它能够节省宝贵的 CPU 或内存资源,避免不必要的创建对象开销。然而,在多线程应用中,对于那些非线程安全的数据库组件,传统的 Singleton 将容易造成不稳定。如果使用 Synclock 进行同步,性能损耗可能将更大,特别在并发访问高的 ASP.net 应用中。
前十几天和网友聊天的时候,他把 ThreadwiseSingleton 发给了我,我随后改写成泛型类。事实上,它基于 Threadslot 构建,因此达到了线程隔离的效果。您需要传入一个 Func(Of TResult) 完成初始化的工作。如果您的类中含有非托管资源,并无法预见可能的错误时,请使用一个 Try...Finally... 包裹将要运行的程序。同时感到抱歉的是,拖延了很久很久才发出来。
Imports System.Threading
''' <summary>
''' 一个线程隔离的 Singleton。
''' </summary>
Public Class ThreadwiseSingletonClass ThreadwiseSingleton(Of T As IDisposable)
Private Shared _Factory As Func(Of T)
''' <summary>
''' 获取构建此实例的工厂类。
''' </summary>
Public Shared Property Factory()Property Factory() As Func(Of T)
Get
Return _Factory
End Get
Set(ByVal value As Func(Of T))
_Factory = value
End Set
End Property
''' <summary>
''' 获得线程中的唯一实例。
''' </summary>
Public Shared ReadOnly Property Instance()Property Instance() As T
Get
Dim threadSlot As LocalDataStoreSlot = Thread.GetNamedDataSlot(GetType(T).ToString)
Dim threadSlotObj As Object = Thread.GetData(threadSlot)
If threadSlotObj Is Nothing Then
'Create singleton instance
Dim ins As T = Factory.Invoke
Thread.SetData(threadSlot, ins)
Return ins
Else
Return DirectCast(threadSlotObj, T)
End If
End Get
End Property
''' <summary>
''' 私有的构造函数。
''' </summary>
Private Sub New()Sub New()
End Sub
''' <summary>
''' 释放此 Singleton 实例使用的资源。请不要直接调用 Instance.Dispose()。
''' </summary>
Public Shared Sub Dispose()Sub Dispose()
Instance.Dispose()
'放空槽
Dim threadSlot As LocalDataStoreSlot = Thread.GetNamedDataSlot(GetType(T).ToString)
Thread.SetData(threadSlot, Nothing)
End Sub
End Class
(出处:急速软件下载学院)
-
- Visual Basic构建线程安全的Singleton 相关文章:
- ·究竟有多糟糕 2007年值得注意的安全事件
- ·平安夜美丽蜡烛的装置设计欣赏
- ·用十大安全策略加固无线局域网安全
- ·Photoshop字体安装使用方法和技巧
- ·2007的网络安全焦点之终端Web安全
- ·McAfee发布2008年十大安全威胁预测
- ·惠普82款笔记本存在严重网络安全漏洞
- ·IDC邮件安全网关解决方案提高带宽效率
- ·危机重重 2007年度网络安全分析报告
- ·Win2000下PHP服务器安装攻略
- Visual Basic构建线程安全的Singleton 相关软件
- ·CEG西安站第三天决赛半决赛录象包
- ·《印第安纳琼斯的桌面冒险》试玩
- ·《生化危机4》完整字幕简易安装包
- ·《QQ游戏2007》beta1安装程序
- ·联众游戏 -《双扣》安装包
- ·《侠盗猎车手:圣安地列斯》35项属性修改器
- ·《合金战纪》绿色免安装版封测客户端
- ·《魔兽》地图:拯救尤迪安2.93单人完全版
- ·安意如作品合集
- ·《反恐精英CS1.6》完整安装版本
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·VB表格控件总览与例程分析
- ·VB+Access设计图书管理系统
- ·用VB6.0制作画图板
- ·给VB控件PictureBox加滚动条的方法
- ·VB编程之路-如何让界面美化
- ·用MsFlexGrid控件显示数据库中的记录
- ·如何用VB程序来播放WAV文件
- ·CreatePolygonRgn
- ·用VB实现井字游戏
- ·利用硬盘序列号计算软件注册码
- ·串口通讯及其在VB平台下的实现
- ·VB中用Multimedia MCI控件开发多媒体应用
- ·在VFP、VB应用程序中激活鼠标功能
- ·VB.NET实现窗体图标最小化到状态栏
- ·VB 9新特性—保留与舍去了什么?
- ·VB基础学习:编码规范
- ·VB设计有语音报时和报警功能的闹钟
- ·用VB6分离出文本框的单词
- ·用VB实现Win2000用户限时登录
- ·VB应用程序中实现“查找和替换”功能
特别推荐
- ·VB表格控件总览与例程分析
- ·用VB6.0制作画图板
- ·VB打造超酷个性化菜单(六)
- ·MSHFlexGrid 控件的应用
- ·Visual Basic 控件简介
- ·利用硬盘序列号计算软件注册码
- ·计算机等级考试二级VB常用算法:排序
- ·用diskid.dll和disk32.dll获得硬盘序列号
- ·VB6中使用Winsock穿越各种代理的实现
- ·在VFP、VB应用程序中激活鼠标功能
- ·vb基础(打印问题)
- ·想用就用,VB基础代码
- ·运用多媒体WAV文件格式二三例
- ·VB基础学习:编码规范
- ·VB实现程序的隐形
- ·使用.NET Framework从VB6中访问事件日志
- ·怎样把VC++代码转换成VB代码
- ·如何用VB程序来播放WAV文件
- ·VB 实用函数集
- ·用VB制作RM压缩软件
