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