18/9/2007 10:54 El Bruno

If .Net.Crash = True Then Report() ... (eso me pasa por probar con C#)

Buenas

estaba comentando con unos compañeros la utilización de String.IsNullOrEmpty en las aplicaciones para mejorar la performance de las mismas (sumado al uso de StringBuilder, etc.); cuando mi proyecto de ejemplo de Consola de C# se estrelló estrepitosamente contra la memoria de Windows.

Después de buscar un rato la solución (y pensando que el error era mío), me encuentro con este bug de C# (yes C# no VB):

Null Exemption caused by JIt optimisation around String.IsNullOrEmpty

 

Lo resumo en pocas palabras, si dentro de una aplicación de Consola utilizamos la función String.IsNullOrEmpty con un valor nulo, el exe compilado de la aplicación en modo Release disparará un error cuando lo ejecutemos. Pueden probar con el código de ejemplo del bug

1 static void Main(string[] args) 2 { 3 Console.WriteLine("starting"); 4 test(null); 5 Console.WriteLine("finished"); 6 Console.ReadLine(); 7 } 8 static void test(string x) 9 { 10 for (int j = 0; j < 10; j++) 11 { 12 if (String.IsNullOrEmpty(x)) 13 { 14 //TODO: 15 } 16 } 17 }

 

Lo interesante del tema, al margen de la solución del error para Microsoft Visual Studio 2008, es la capacidad que tenemos para reportar errores sobre Visual Studio, .Net Fwk, etc.; y como el equipo de desarrollo de Microsoft está al tanto de los mismos.

Pero no solo errores podemos reportar en la sección de Feedback del Connect de Visual Studio, también podremos realizar sugerencias para mejorar funcionalidades existentes de Visual Studio o para agregar nuevas.

Además, si estamos anotados en los programas de Beta Tester de algún producto y participas activamente con reportes de errores y sugerencias, algún detallito tendrá la gente de Visual Studio contigo ... (aunque no me sirve de mucho tener varios juegos para la XBox 360 en Seattle jejeje)

 

Pues bien, a no desarrollar en C# tener cuidado con la depuración de errores y mucho más en aplicaciones de consola C# con String.IsNullOrEmpty en las mismas :D

 

Saludos desde Lisboa

El Bruno

Crossposting from ElBruno.com
Archivado en: ,
Comparte este post:

# re: If .Net.Crash = True Then Report() ... (eso me pasa por probar con C#)

Tuesday, September 18, 2007 6:14 PM by Ramón Sola

¿En VB.NET no se reproduce? A mí me parece un bug insultante, jejeje. Hay un hotfix y todo.

FIX: You receive the NullReferenceException exception when you call the String.IsNullOrEmpty function in an application that is built on the .NET Framework 2.0: support.microsoft.com/.../940900

Los workarounds: desactivar las optimizaciones (kk) o hacer tú mismo la comprobación contra null (otra kk).

# re: If .Net.Crash = True Then Report() ... (eso me pasa por probar con C#)

Tuesday, September 18, 2007 6:46 PM by Anonimo

Es conveniente agregar que ese bug aparece solamente, si ejecutamos esa linea dentro de un loop

# re: If .Net.Crash = True Then Report() ... (eso me pasa por probar con C#)

Tuesday, September 18, 2007 9:48 PM by El Bruno

Ramon ... pues si los wa son validos, pero medio q van en contra de lo q nos gusta hacer en "release" jejeje ...

anonimo buen punto, solo en Loooooooooooooop ... ;)

Saludos

# re: If .Net.Crash = True Then Report() ... (eso me pasa por probar con C#)

Wednesday, September 19, 2007 11:31 AM by phobeo

esta curioso... no tengo un sdk aqui para probarlo pero el problema debe estar en la optimizacion del bucle del compilador (posiblemente por desenrollado), estaria bien poder ver ese bytecode... }:)

# re: If .Net.Crash = True Then Report() ... (eso me pasa por probar con C#)

Wednesday, September 19, 2007 9:13 PM by Ernesto

La ironia es que yo me entere de que habia esa funcion porque el CodeAnalisis me lo recomendo!!!!

# re: If .Net.Crash = True Then Report() ... (eso me pasa por probar con C#)

Thursday, September 20, 2007 6:49 PM by El Bruno

Anonimo atacante

pues la respuesta para SBuilder puedes verla en elbruno.com/.../vs2005-strings-vs-stringbuilders.aspx

Saludos