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
