Cualquier clase en .NET tiene dos constructores, uno de clase (es el que se
marca como static en C# o Shared en VB) y otro de instancia.
 
El constructor de clase se dispara con el primer acceso a cualquier miembro de
la clase. La vida de los miembros de clase comienza en ese momento y dura hasta
que se cierre el AppDomain. En el caso del AppDomain de las aplicaciones Web
dura desde el Application_Start hasta el Application_End.
 
Esto es aproximado ya que no soy un experto en los detalles internos del
framework.
 
Carlos


  _____  

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of MYMTEC S.A.
- Javier Wamba
Sent: Jueves, 15 de Febrero de 2007 12:14 p.m.
Cc: Lista .net
Subject: !-> [puntonet] colecciones estaticas


En base a lo que me sugirio Leonardo para evitar la concurrencia en una
grabacion de registros de stock hice una prueba que mas abajo adjunto. El tema
es que me surgio una duda con respecto a los metodos y propiedades estaticas. 
Lo probe en una aplicacion asp.net, utilize un pattern singleton, pido la
instancia de dos hilos distintos y me fijo si no hay concurrencia. El tema es
que al cerrar la aplicacion en una maquina y dejarla abierta en otra la
coleccion que voy cargando con las llamadas queda viva. Mi pregunta es, ¿Cual es
el ciclo de vida de una coleccion que esta declarada como estatica en una
clase?.
 
Muchas gracias
 
Javier
 
********************************************************************************
********************************************************************************
********************

Partial Class _Default

Inherits System.Web.UI.Page

Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles form1.Load



End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Button1.Click

Dim ss As New Class1

ss.correrHilos(Me.TextBox2.Text)

Me.TextBox1.Text = ""

For Each cad As String In mymtec.pattern.Singleton.coleccion

Me.TextBox1.Text = Me.TextBox1.Text & vbCrLf & cad & " "

Next

End Sub

End Class

 

********************************************************************************
********************************************************************************
********************

Public Class Class1

Public Sub correrHilos(ByVal dondeEstoy As String)

Dim sdd As mymtec.pattern.Singleton = mymtec.pattern.Singleton.GetInstance

Dim tr As New System.Threading.Thread(New Threading.ThreadStart(AddressOf
sdd.grabar))

tr.Name = dondeEstoy & " ** " & "proceso1"

tr.Start()

Dim ss As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf
sdd.grabar))

ss.Name = dondeEstoy & " ** " & "proceso2"

ss.Start()

While tr.ThreadState <> Threading.ThreadState.Stopped Or ss.ThreadState <>
Threading.ThreadState.Stopped

Dim tito As String = "hola"

End While

End Sub

End Class

********************************************************************************
********************************************************************************
*****************************************************************

Imports System.Threading

Namespace mymtec.pattern

Public Class Singleton

Public Shared coleccion As New Collection

Private Shared _singleton As Singleton

Private Shared _mu As New Mutex()

Private Sub New()

End Sub

Public Shared Function GetInstance() As Singleton

_mu.WaitOne()

Try

If _singleton Is Nothing Then

_singleton = New Singleton()

End If

Finally

_mu.ReleaseMutex()

End Try

Return _singleton

End Function

Public Sub grabar()

_mu.WaitOne()

coleccion.Add(System.Threading.Thread.CurrentThread.Name & " - 1")

Threading.Thread.Sleep(1000)

coleccion.Add(System.Threading.Thread.CurrentThread.Name & " - 2")

_mu.ReleaseMutex()

End Sub

End Class

End Namespace

 

 

Responder a