La implementacion es correcta siempre y cuando no devuelvas referencias a
mQueries fuera de la clase XXX. Cuidado con eso, si ese fuera el caso,
seria preferible bloquear una referencia privada a una instancia de Object.

Saludos

----------------------------------
Carlos Peix

2013/3/19 Damián Herrera <[email protected]>

> Hola Carlos,
>
> Me mataste, te copio como esta armado el Synclock del Dictionary, el
> object en cuestión es mQueries.
>
> *Class XXX*
> *
> *
> *Private mQueries As New Generic.Dictionary(Of String, String)
> *
> *
> *
> *Public Function GetQuery(ByVal pParameterCollection As
> ParameterCollection) As String*
> *...*
> *SyncLock mQueries
> *
> *'Pregunto si existe el key, si no existe, e**scribo en mQueries....*
> *End SyncLock
> *
> *
> *
> *Return mQueries(mQueryKey)*
> *End Function
> *
> *
> *
> *End Class*
>
>
>
>
>
> Saludos,
> Ing. Damián Herrera
> Director
> CIVINEXT
> Tel. / Fax: +54 (11) 3968-0039
> [email protected]
> http://www.civinext.com
> <http://www.linkedin.com/company/civinext-s.a.> 
> <http://www.facebook.com/groupware><http://www.twitter.com/damianherrera><http://www.youtube.com/user/damianherrera>
>   <http://es.wikipedia.org/wiki/Civinext>
>
>
>
> El 19 de marzo de 2013 11:54, Carlos Peix <[email protected]>escribió:
>
>>  OK, un XML de 500K puede ocupar 1 o 2 MB en memoria, pero tampoco es
>> mucho.
>>
>> Respecto del SyncLock, habria que ver como esta hecho, pero si has tomado
>> las precauciones, no creo que venga por ese lado
>>
>> ----------------------------------
>> Carlos Peix
>>
>> 2013/3/19 Damián Herrera <[email protected]>
>>
>>>  Hola Carlos,
>>>
>>> Gracias por tu respuesta. Al XmlDocument lo escribo en el stratup del
>>> application protegido con un mutex para evitar asegurar que se escribe una
>>> unica vez, luego la consulta si es multi thread.
>>>
>>> Con el Dictionary no estoy seguro de lo que esta sucediendo, pero para
>>> escribirlo lo hago con un SyncLock para asegurar tambien el Thread Safe. La
>>> lectrura también es multi thread.
>>>
>>> Tarde en responderte porque estuve buscando en unos reportes del Debug
>>> Diagnostic Tool y no encontré específicamente esta info. Es decir,
>>> la encontré de un montón de otros objetos, pero no del XmlDocument ni del
>>> Generic.Dictionary. Para dimensionar el XmlDocument, busque todos los XML
>>> que tengo y con toda la furia llegaría a 500KB y el Dictionary debería ser
>>> similar o menor.
>>>
>>>
>>>
>>>
>>> Saludos,
>>> Ing. Damián Herrera
>>> Director
>>> CIVINEXT
>>> Tel. / Fax: +54 (11) 3968-0039
>>> [email protected]
>>> http://www.civinext.com
>>> <http://www.linkedin.com/company/civinext-s.a.> 
>>> <http://www.facebook.com/groupware><http://www.twitter.com/damianherrera><http://www.youtube.com/user/damianherrera>
>>>   <http://es.wikipedia.org/wiki/Civinext>
>>>
>>>
>>>
>>> El 18 de marzo de 2013 23:07, Carlos Peix 
>>> <[email protected]>escribió:
>>>
>>>>  Hola Damian,
>>>>
>>>> Por el lado del XMLDocument, no es una estructura muy buena para
>>>> almacenar datos en memoria. Por un lado es muy poco eficiente en el uso de
>>>> la memoria y no estoy seguro de que sea thread safe.
>>>>
>>>> Por el lado del Dictionary<,> seguro que no es thread safe para la
>>>> escritura, deberias sincronizar el acceso para lograrlo.
>>>>
>>>> Ahora bien, no creo que ninguna de las dos estructuras "pierdan"
>>>> objetos aunque haya mucha presión de memoria.
>>>>
>>>> Tenes una idea del tamaño de esas estructuras?
>>>>
>>>> ----------------------------------
>>>> Carlos Peix
>>>>
>>>> 2013/3/18 Damián Herrera <[email protected]>
>>>>
>>>>> Buenas,
>>>>>
>>>>> Espero que anden bien. Hace mucho que no escribo y buscando algo de
>>>>> info. me pareció que era algo para postear en la lista.
>>>>>
>>>>> Actualmente tenemos un problema en ambientes de alto
>>>>> trafico, básicamente manejamos Generic.Dictionary(string,string) y
>>>>> Xml.XmlDocument. Únicamente en ambientes de alto trafico, nos sucede de 
>>>>> vez
>>>>> en cuando que desaparecen elementos del Dictionary o el XmlDocument
>>>>> queda vacío.
>>>>>
>>>>> Sospecho que el XMLDocument queda vacío porque hay momentos en los que
>>>>> no se utiliza porque hay una capa de cache que hace que se lo consulte
>>>>> poco, pero la referencia sigue activa dentro de una clase (esta declarado
>>>>> como private shared). Algo similar ocurre con el Dictionary, pero este se
>>>>> usa más que el XmlDocument.
>>>>>
>>>>> La consulta en si misma es, hay alguna forma de "marcar" o especificar
>>>>> que esas variables no deben ser recolectadas o alguna manera de que me
>>>>> entere cuando las recolectan? Es algo que estuve buscando y
>>>>> no encontré mucha info. y no estoy seguro que tenga que ver con el GC.
>>>>>
>>>>> Bueno, cualquier orientación se agradece.
>>>>>
>>>>> Saludos!
>>>>> Ing. Damián Herrera
>>>>> Director
>>>>> CIVINEXT
>>>>> Tel. / Fax: +54 (11) 3968-0039
>>>>> [email protected]
>>>>> http://www.civinext.com
>>>>> <http://www.linkedin.com/company/civinext-s.a.> 
>>>>> <http://www.facebook.com/groupware><http://www.twitter.com/damianherrera><http://www.youtube.com/user/damianherrera>
>>>>>   <http://es.wikipedia.org/wiki/Civinext>
>>>>>
>>>>>
>>>>
>>>
>>
>

Responder a