[Mono-dev] set culture uses serialization?

Steve Bjorg steveb at mindtouch.com
Sat Jan 5 00:10:57 EST 2008


This issue and the fact that Korean isn't supported for CultureInfo  
are blockers for a large customer deployment of ours.  Is there any  
way these issues can be addressed?  Who is working on CultureInfo?

- Steve

--------------
Steve G. Bjorg
http://wiki.mindtouch.com
http://wiki.opengarden.org


On Jan 3, 2008, at 12:22 PM, Steve Bjorg wrote:

> Zoltan, thanks again for your quick reply.
>
> That assumption might be true for desktop applications, but not for  
> a server which runs a localized application.  Each request is  
> handled in the website's configured culture.  The matter is made  
> even worse when the server tries to be smart and handle the request  
> by using asynchronous operations.  Each completion handler must  
> reset the current culture since it it will resume on an arbitrary  
> thread of the thread pool.
>
> Maybe I'm going all wrong about this?  What is the recommended  
> pattern for running a localized web-application that uses  
> asynchronous operations?
>
> - Steve
>
> --------------
> Steve G. Bjorg
> http://wiki.mindtouch.com
> http://wiki.opengarden.org
>
>
> On Jan 3, 2008, at 11:59 AM, Zoltan Varga wrote:
>
>> Hi,
>>
>> CultureInfo might be inmutable, but its components like
>> NumberFormatInfo are not.
>> Also, even if it is inmutable, objects cannot be shared across  
>> appdomains, so we
>> couldn't use the object set by the application in another domain.
>> We assume that the thread culture is set only rarely, so the
>> serialization overhead
>> should not be a problem.
>>
>>               Zoltan
>>
>> On Jan 3, 2008 8:37 PM, Steve Bjorg <steveb at mindtouch.com> wrote:
>>> Well, the application runs in 10 different languages simultaneously.
>>> So, this is only going to help in a few cases.  In other words, I
>>> should forget about CurrentCulture and instead use a manual override
>>> in all my date and number formatting invocations?  That's going  
>>> to be
>>> a major pain... :(
>>>
>>> Is this how it behaves under .Net as well?  I'm really surprised
>>> about the behavior since CultureInfo is immutable (afaik).
>>>
>>>
>>> - Steve
>>>
>>> ---------------------------------
>>> Steve G. Bjorg
>>>
>>> MindTouch
>>> 555 W. Beech St.
>>> Suite 501
>>> San Diego, CA 92101
>>>
>>> 619.795.8459x1106 office
>>> 619.795.3948 fax
>>> 425.891.5913 mobile
>>>
>>>
>>>
>>>
>>> On Jan 3, 2008, at 11:17 AM, Zoltan Varga wrote:
>>>
>>>> You could try calling Thread.CurrentCulture, compare the return
>>>> value with the
>>>> culture you want to set, and only call the setter if the two are
>>>> different.
>>>>
>>>>                  Zoltan
>>>>
>>>> On Jan 3, 2008 6:40 PM, Steve Bjorg <steveb at mindtouch.com> wrote:
>>>>> In short, I cannot change the current culture without incurring  
>>>>> the
>>>>> serialization cost, correct?  Or am I missing something?
>>>>>
>>>>> - Steve
>>>>>
>>>>> --------------
>>>>> Steve G. Bjorg
>>>>> http://wiki.mindtouch.com
>>>>> http://wiki.opengarden.org
>>>>>
>>>>>
>>>>>
>>>>> On Jan 3, 2008, at 8:48 AM, Zoltan Varga wrote:
>>>>>
>>>>>> Because code in other appdomains might call Thread.CurrentCulture
>>>>>> on the same
>>>>>> thread object since thread objects are shared between appdomains.
>>>>>>
>>>>>>            Zoltan
>>>>>>
>>>>>> On Jan 3, 2008 4:30 PM, Steve Bjorg <steveb at mindtouch.com> wrote:
>>>>>>> Zoltan, thx for response.
>>>>>>>
>>>>>>> I can see how serialization applies to app domains, but why
>>>>>>> would it
>>>>>>> serialize inside the same app domain?  Isn't CultureInfo an
>>>>>>> immutable
>>>>>>> object?
>>>>>>>
>>>>>>>
>>>>>>> - Steve
>>>>>>>
>>>>>>> --------------
>>>>>>> Steve G. Bjorg
>>>>>>> http://wiki.mindtouch.com
>>>>>>> http://wiki.opengarden.org
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Jan 3, 2008, at 6:49 AM, Zoltan Varga wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> The current culture is shared between appdomains so the runtime
>>>>>>>> stores it in
>>>>>>>> serialized form.
>>>>>>>>
>>>>>>>>                       Zoltan
>>>>>>>>
>>>>>>>> On Jan 3, 2008 8:21 AM, Steve Bjorg <steveb at mindtouch.com>  
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> I ran into the following error today on our system (note: I
>>>>>>>>> truncated the
>>>>>>>>> stack for legibility).  The interesting part is in bold  
>>>>>>>>> (prefixed
>>>>>>>>> by * in
>>>>>>>>> case the formatting got lost)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS
>>>>>>>>> Stacktrace:
>>>>>>>>>   at (wrapper managed-to-native)
>>>>>>>>> System.Object.__icall_wrapper_mono_array_new_specific
>>>>>>>>> (intptr,int)
>>>>>>>>> <0x00004>
>>>>>>>>>   at (wrapper managed-to-native)
>>>>>>>>> System.Object.__icall_wrapper_mono_array_new_specific
>>>>>>>>> (intptr,int)
>>>>>>>>> <0xffffffff>
>>>>>>>>>   at System.IO.MemoryStream.set_Capacity (int) <0x0004c>
>>>>>>>>>   at System.IO.MemoryStream.Write (byte[],int,int) <0x0007a>
>>>>>>>>>   at System.IO.BinaryWriter.Write (string) <0x000c8>
>>>>>>>>>   at GregorianCalendar__TypeMetadata.WriteTypeData
>>>>>>>>> (System.Runtime.Serialization.Formatters.Binary.ObjectWriter,S 
>>>>>>>>> yst
>>>>>>>>> em
>>>>>>>>> .I
>>>>>>>>> O.BinaryWriter,bool)
>>>>>>>>> <0x0001f>
>>>>>>>>>   at
>>>>>>>>> System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Wr 
>>>>>>>>> ite
>>>>>>>>> Ob
>>>>>>>>> je
>>>>>>>>> ct
>>>>>>>>> (System.IO.BinaryWriter,long,object) <0x0020d>
>>>>>>>>>   at
>>>>>>>>> System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Wr 
>>>>>>>>> ite
>>>>>>>>> Ob
>>>>>>>>> je
>>>>>>>>> ctInstance
>>>>>>>>> (System.IO.BinaryWriter,object,bool) <0x0014c>
>>>>>>>>>   at
>>>>>>>>> System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Wr 
>>>>>>>>> ite
>>>>>>>>> Qu
>>>>>>>>> eu
>>>>>>>>> edObjects
>>>>>>>>> (System.IO.BinaryWriter) <0x0002d>
>>>>>>>>>   at
>>>>>>>>> System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Wr 
>>>>>>>>> ite
>>>>>>>>> Ob
>>>>>>>>> je
>>>>>>>>> ctGraph
>>>>>>>>> (System.IO.BinaryWriter,object,System.Runtime.Remoting.Messagi 
>>>>>>>>> ng.
>>>>>>>>> He
>>>>>>>>> ad
>>>>>>>>> er[])
>>>>>>>>> <0x0003a>
>>>>>>>>>   at
>>>>>>>>> System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 
>>>>>>>>> .Se
>>>>>>>>> ri
>>>>>>>>> al
>>>>>>>>> ize
>>>>>>>>> (System.IO.Stream,object,System.Runtime.Remoting.Messaging.Hea 
>>>>>>>>> der
>>>>>>>>> [])
>>>>>>>>> <0x00206>
>>>>>>>>> *  at
>>>>>>>>> System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 
>>>>>>>>> .Se
>>>>>>>>> ri
>>>>>>>>> al
>>>>>>>>> ize
>>>>>>>>> (System.IO.Stream,object) <0x00015>
>>>>>>>>> *  at System.Threading.Thread.set_CurrentUICulture
>>>>>>>>> (System.Globalization.CultureInfo) <0x00056>
>>>>>>>>>   at MindTouch.Dream.Task.Execute
>>>>>>>>> (System.VoidHandler,MindTouch.Dream.TaskBehavior) <0x00093>
>>>>>>>>>
>>>>>>>>> The odd thing is that it appears setting the culture  
>>>>>>>>> invokes the
>>>>>>>>> serializer!?!  Our async execution framework sets the culture
>>>>>>>>> for all
>>>>>>>>> asynchronous operations.  Question is, why is it using
>>>>>>>>> serialization though?
>>>>>>>>> Can I avoid this somehow and still set the culture?  Thx.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> - Steve
>>>>>>>>>
>>>>>>>>> --------------
>>>>>>>>> Steve G. Bjorg
>>>>>>>>> http://wiki.mindtouch.com
>>>>>>>>> http://wiki.opengarden.org
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Mono-devel-list mailing list
>>>>>>>>> Mono-devel-list at lists.ximian.com
>>>>>>>>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>




More information about the Mono-devel-list mailing list