StringBuilder…

Ante la necesidad de manipular cadenas de caracteres dinámicamente nos encontramos con dos posibilidades:

  1. manejar cadenas con la clase String y realizar sobre él acciones como ser concatenación, reemplazo, inserción, etc.
  2. manejar cadenas con la clase StringBuilder.

Lo más común y más “fácil” es trabajar con String, mantener una instancia e ir realizando tratamientos sobre ella, como ser concatenar strings por medio del operador +,  lo cual nos lleva a crear código poco performante y hasta por momentos engorrosos. Dado que los Strings son de tamaño fijo, al concatenar dos cadenas con el operador + se crea una instancia aparte, lo que  lleva a disminuir el rendimiento debido al mal uso de memoria.

Por lo tanto para operar con cadenas de caracteres lo más formal (y también más óptimo) es utilizar la clase StringBuilder.

¿Qué podemos hacer con  StringBuilder?

La clase StringBuilder nos provee los siguientes métodos:

  • Append: Anexa al final de la instancia la representación en forma de cadena de un objeto especificado.
  • AppendFormat: Anexa a la instancia una cadena con formato, que contiene cero o más especificaciones de formato. Cada especificación de formato se reemplaza por la representación en forma de cadena de un argumento de objeto correspondiente.
  • AppendLine: Anexa el terminador de línea predeterminado, o una copia de una cadena especificada y el terminador de línea predeterminado, al final de esta instancia.
  • CopyTo: Copia los caracteres de un segmento especificado de esta instancia al segmento especificado de una matriz Char de destino.
  • EnsureCapacity: Garantiza que la capacidad de la instancia de StringBuilder corresponde como mínimo al valor especificado.
  • Remove: Elimina de la instancia el intervalo de caracteres especificado.
  • Replace: Reemplaza todas las apariciones de un carácter o cadena en la instancia por otro carácter o cadena especificados.
  • ToString: Sobrecargado. Reemplazado. Convierte el valor de un objeto StringBuilder en un objeto String.

Ejemplo:

usando String:

String mensaje = "Medios de pago excedidos de saldo: ";
foreach (DocSaldo.SaldoRow fila in doc.Saldo.Rows) {
    mensaje += Environment.NewLine + fila.MedioPago;
}

usando String Builder:

StringBuilder mensaje = new StringBuilder("Medios de pago excedidos de saldo:");
mensaje.Append(Environment.NewLine);

foreach (DocSaldo.SaldoRow fila in doc.Saldo.Rows) {
    mensaje.AppendLine(fila.MedioPago);
}
String mensajeString = mensaje.ToString();

Como se puede notar, la segunda opción es más formal y me atrevo a decir “más Orientada a Objetos”.

Una observación adicional es el constructor del StringBuilder, el cual en una de sus sobrecargas nos permite inicializarlo con una cadena de caracteres.

Cuando implementamos la primera opción FxCop nos indica con un issue que debemos cambiarlo por el uso de StringBuilder, que es la segunda opción.

Más información:

http://msdn.microsoft.com/es-es/library/system.text.stringbuilder(VS.80).aspx

Anuncios
Publicado en C#, Tips. Etiquetas: . 2 Comments »

Cambio de URL…

Como verán, cambie el nombre del blog, por uno un poco más creativo que mi nombre y apellido jejeje.

Gracias Pablo SM por inspirarme en este cambio de nombre!!!

Error: System.IO.File.OpenRead() throw IOException…

Con esta entrada comienzo a nombrar problemas y errores comunes y las soluciones que he encontrado a cada una de ellas. Podrán identificar estas entradas por la etiqueta o porque el título comienza con “Error”.

Problema:

System.IO.File.OpenRead(FileName) tira una excepción del tipo “System.IO.IOException” con texto: {“The process cannot access the file ‘C:\\archivo.txt’ because it is being used by another process.”}, cuando el archivo que queremos leer se encuentra bloqueado por otro proceso.

Solución:

Reemplazar 

System.IO.Stream input = System.IO.File.OpenRead(FileName)

por:

System.IO.Stream input = new System.IO.FileStream(FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)

Publicado en Errores. Etiquetas: . Leave a Comment »

Microsoft FxCop…

FxCop es un analizador de buenas prácticas de programación, es una herramienta de análisis de código que verifica el código de las assemblies de .NET para lograr la conformidad de “Microsoft .NET Framework Design Guidelines“.

FxCop inspecciona los assemblies para detectar más de 200 defectos en las siguientes áreas: 

  • Diseño de librerías
  • Globalización
  • Convenciones de nomenclatura
  • Performance
  • Interoperabilidad y portabilidad
  • Seguridad
  • Usabilidad

FxCop incluye versiones GUI y línea de comandos, con soporte para analizar componentes .NET 1.x, .NET 2.0 y .NET 3.x.

FxCop nos ayuda a analizar nuestro código y nos propone algunas mejoras y fixes al código, con el fin de hacerlo más robusto y seguro.

Como dije, hay 2 formas de analizar el código, pero la manera más fácil y rápida es utilizando su GUI:

en VS .NET

Si contamos con la versión 1.35 podemos realizar el análisis, haciendo click con el botón derecho en el proyecto y haciendo click en la opción Run Code Analysis, como se muestra en la figura:

como resultado en la lista de errores obtenemos los warnings relacionados a los fixes propuestos:


la resolución de los problemas encontrados se basa en leer e interpretar los warnings. Cabe aclarar que para personalizar las reglas utilizadas en el Code Analysis, se las puede modificar en las propiedades del proyecto, en el Tab “Code Analysis”.

Si tenemos la versión 1.36b el análisis puede realizarse sobre los proyectos o también sobre clases específicas (de ahí la denominación de “Source analysis” o “análisis de fuente”:

y los resultados se visualizaran en una lista denominada “source analysis”.

FxCop.exe

FxCop.exe brinda una interfaz amigable en la cual se pueden crear proyectos de análisis de código, en el cual se pueden agregar numerosos assemblies, personalizar las políticas (reglas) de análisis, etc. En cada una de las issues reportadas se puede ver la descripción, su link a las guías de diseño relacionado, link al código, información adicional, entre otros.

Bien, ahora queda por aclarar que FxCop nos ayuda a hacer de nuestro código más robusto y más seguro, más eficiente y estándar con respecto a las buenas prácticas, por lo que es importante que sepamos guiarnos con la herramienta, absorviendo las recomendaciones para usarlas de manera directa e intuitivamente en nuestro futuro código…

En el proyecto en que estoy trabajando después de terminar el desarrollo de casi todos los paquetes, llegamos a la instancia de optimización de la aplicación, por lo cual la primer medida es optimizar el código (quizás se podría haber echo antes), y qué mejor herramienta para esto que la nombrada en esta entrada. A partir de ahora, me queda claro que debería aplicarlo a cada desarrollo que tenga. 😀

Publicado en Development, Herramientas. Etiquetas: . Leave a Comment »