Visual Basic构建线程安全的Singleton

大抵而言,Singleton 模式应该是设计模式中相当常用的一种了。它能够节省宝贵的 CPU 或内存资源,避免不必要的创建对象开销。然而,在多线程应用中,对于那些非线程安全的数据库组件,传统的 Singleton 将容易造成不稳定。如果使用 Synclock 进行同步,性能损耗可能将更大,特别在并发访问高的 ASP.net 应用中。
前十几天和网友聊天的时候,他把 ThreadwiseSingleton 发给了我,我随后改写成泛型类。事实上,它基于 Threadslot 构建,因此达到了线程隔离的效果。您需要传入一个 Func(Of TResult) 完成初始化的工作。如果您的类中含有非托管资源,并无法预见可能的错误时,请使用一个 Try...Finally... 包裹将要运行的程序。同时感到抱歉的是,拖延了很久很久才发出来。

步骤/方法

  • 01

    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))

  • 02

    _Factory = value End Set End Property ''' <summary> ''' 获得线程中的唯一实例。 ''' </summary> Public Shared ReadOnly Property Instance()Property Instance() As T

  • 03

    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

  • 04

    Else Return DirectCast(threadSlotObj, T) End If End Get End Property ''' <summary> ''' 私有的构造函数。 ''' </summary> Private Sub New()Sub New() End Sub ''' <summary>

  • 05

    ''' 释放此 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

(0)

相关推荐

  • 如何解决Word提示无法初始化visual basic环境的问题

    因为长期要使用Word软件,所以经常会用到“宏”这一强大的功能,刚才打开Word里面的“录制新宏”发现老是提示“无法初始化visual basic环境。”根本就无法操作,到底该如何解决此问题呢?对此问 ...

  • 办公软件另存为出现VISUAL BASIC怎么解决?

    对于这一问题,小编整理了网友们常用的几种方法: 方法1:打开宏--安全性,把安全性设为"高":再转到"可靠发行商",把"信任所有安装的加载项和模板&q ...

  • WinXP系统无法初始化Visual Basic环境怎么解决?

    WinXP系统无法初始化Visual Basic环境怎么解决?

  • 如何在电脑中下载并安装visual basic 6.0

    visual basic 6.0是现在十分常用的一款编程软件,有些新用户不知道如何下载并安装该软件,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1. 首先第一步先打开电脑浏览器,接着根据下图所 ...

  • Excel怎么用Visual Basic计算数组长度

    Excel是现在十分常用的办公软件之一,有些用户不知道怎么用Visual Basic计算数组长度,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1. 首先第一步打开电脑中需要计算的Excel文档 ...

  • win10系统怎么安装Visual Basic 6.0

    Visual Basic 6.0是由微软开发的一款编程软件,有些新用户不知道win10系统怎么安装该软件,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1. 首先第一步先右键单击Visual B ...

  • word无法初始化visual basic环境(word无法初始化visual)

    不论是上学时期的你,还是已经步入社会上班的你,我们都会在生活中经常使用到WPS这款软件.使用这款软件我们不仅可以编写文章.制作表格,还能够制作开会演示时所用的PPT. 然而,在打开WPS软件的时候,有 ...

  • 如何使用安装visual basic 6.0

    visual basic 6.0为微软公司开发的visual basic语言编辑器,可视化编辑,可以调试运行程序,下面介绍如何使用安装visual basic 6.0程序. 操作方法 01 点击set ...

  • excel Microsoft Visual Basic 如何使用?

    在excel的日常应用中,有时候想使用Visual Basic 编写一些小代码提供工作效率,这个就和大家分享一下excel Microsoft Visual Basic使用的基本方法. 操作方法 01 ...