学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> VB >> Visual Basic构建线程安全的Singleton


Visual Basic构建线程安全的Singleton


本文转自博客园,文中内容不代表本站观点,仅提供参考

  大抵而言,Singleton 模式应该是设计模式中相当常用的一种了。它能够节省宝贵的 CPU 或内存资源,避免不必要的创建对象开销。然而,在多线程应用中,对于那些非线程安全的数据库组件,传统的 Singleton 将容易造成不稳定。如果使用 Synclock 进行同步,性能损耗可能将更大,特别在并发访问高的 ASP.net 应用中。

  前十几天和网友聊天的时候,他把 ThreadwiseSingleton 发给了我,我随后改写成泛型类。事实上,它基于 Threadslot 构建,因此达到了线程隔离的效果。您需要传入一个 Func(Of TResult) 完成初始化的工作。如果您的类中含有非托管资源,并无法预见可能的错误时,请使用一个 Try...Finally... 包裹将要运行的程序。同时感到抱歉的是,拖延了很久很久才发出来。

Imports System.Threading

'''
''' 一个线程隔离的 Singleton。
'''

Public Class ThreadwiseSingletonClass ThreadwiseSingleton(Of T As IDisposable)
Private Shared _Factory As Func(Of T)

'''
''' 获取构建此实例的工厂类。
'''

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
'''
''' 获得线程中的唯一实例。
'''

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

'''
''' 私有的构造函数。
'''

Private Sub New()Sub New()

End Sub
'''
''' 释放此 Singleton 实例使用的资源。请不要直接调用 Instance.Dispose()。
'''

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

  查阅关于 VB 的全部文档
技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"Visual Basic构建线程安全的Singleton"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 Visual Basic构建线程安全的Singleton 相关内容
Google搜索中 Visual Basic构建线程安全的Singleton 相关内容
雅虎中 Visual Basic构建线程安全的Singleton 相关内容
Sogou搜索中 Visual Basic构建线程安全的Singleton 相关内容

相关软件 最新回复帖子:

·没有mysql支持时的替代方案
·一个可以发送附件及HTML格式邮件的PHP类
·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效
·用Photoshop通道将模糊肖像照片清晰化


  相关软件 Visual Basic构建线程安全的Singleton相关文章
教你如何用Visual Basic编写病毒 讲解:自己做出VB.NET风格的右键菜单
关于Visual Basic 9.0的动态标识符 VB6中使用Winsock穿越各种代理的实现
VB中运用反射原理优化程序代码 在Visual Basic中使用WinSock控件
利用VB6.0实现五线谱作曲工具 Visual Basic应用程序的几种打印方法
用VB建立字符界面的控制台程序 通信控件MSComm使用详解
VB实现动态调用含DateTime类型存储过程 VB+Access设计图书管理系统
如何用Visual Basic编写病毒 用VB6.0在Vista下实现全磨砂玻璃窗口
VB中调用MSN 6.2 API函数 Visual Basic中实现带预览的对话框
VB访问SQL Server数据库技术全揭密 用Visual Basic实现点对点通讯
Visual baisc中Byval与Byref的区别 VB6.0中Dir()函数的使用方法