Cual es mas rapida ?

27/08/2008 - 16:05 por Pedro | Informe spam
Tengo estas dos alternativas de funciones para convertir a ProperCase(). Es
decir tomar un string y llevarlo a formato de nombre propio:
ej. ProperCase("antonio RUIZ") -> "Antonio Ruiz"

Cual de estas dos funciones debe ser mas rapida:?

1)

public static string ProperCase(string stringInput)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
bool fEmptyBefore = true;
foreach (char ch in stringInput)
{
char chThis = ch;
if (Char.IsWhiteSpace(chThis))
fEmptyBefore = true;
else
{
if (Char.IsLetter(chThis) && fEmptyBefore)
chThis = Char.ToUpper(chThis);
else
chThis = Char.ToLower(chThis);
fEmptyBefore = false;
}
sb.Append(chThis);
}
return sb.ToString();
}


2)
public static string ProperCase(string cString)
{

//Create the StringBuilder
StringBuilder sb = new StringBuilder(cString);

int i,j = 0 ;
int nLength = cString.Length ;

for ( i = 0 ; i < nLength; i++)
{
//look for a blank space and once found make the next character to
uppercase
if ((i== 0) || (char.IsWhiteSpace(cString[i])))
{
//Handle the first character differently
if( i==0 ) {j=i;}
else {j=i+1;}

//Make the next character uppercase and update the stringBuilder
sb.Remove(j, 1);
sb.Insert(j, Char.ToUpper(cString[j]));
}
}
return sb.ToString();
}
 

Leer las respuestas

#1 Alberto Poblacion
27/08/2008 - 17:29 | Informe spam
En este tipo de preguntas de "cuál es más rápida", normalmente vale la pena
hacer un "benchmark" y probarlo, porque a veces te llevas sorpresas.

Dicho lo anterior, mi impresión es la siguiente:
- El tiempo necesario para construir el string de salida va a ser el factor
determinante. En comparación con eso, las comparaciones, indexaciones e
incremento de variables van a tener poco peso.
- La primera rutina construye el string completo, haciendo un Append por
cada carácter. La función Append del StringBuilder es en general rápida,
pero aun asi recibe tantas llamadas como caracteres tenga el string.
- La segunda rutina hace un Remove y un Insert por cada carácter que deba
pasar a mayúsculas (nótese que esta rutina no hace todo lo que la primera,
ya que esta segunda asume que la cadena llega en minúsculas). Estas dos
operaciones en el StrignBuilder son lentas... pero se hacen menos veces que
el Append de la primera.
En consecuencia: la velocidad relativa de ambas rutinas depende del
número de espacios en blanco de la cadena que se le pasa. Si hay muchos,
corre más la primera; si hay pocos, la segunda.

Pero todo esto es especulativo. Nunca se sabe con total certeza mientras
no se hace la prueba, como sugería al principio.

"Pedro" wrote in message
news:uvoR$
Tengo estas dos alternativas de funciones para convertir a ProperCase().
Es decir tomar un string y llevarlo a formato de nombre propio:
ej. ProperCase("antonio RUIZ") -> "Antonio Ruiz"

Cual de estas dos funciones debe ser mas rapida:?

1)

public static string ProperCase(string stringInput)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
bool fEmptyBefore = true;
foreach (char ch in stringInput)
{
char chThis = ch;
if (Char.IsWhiteSpace(chThis))
fEmptyBefore = true;
else
{
if (Char.IsLetter(chThis) && fEmptyBefore)
chThis = Char.ToUpper(chThis);
else
chThis = Char.ToLower(chThis);
fEmptyBefore = false;
}
sb.Append(chThis);
}
return sb.ToString();
}


2)
public static string ProperCase(string cString)
{

//Create the StringBuilder
StringBuilder sb = new StringBuilder(cString);

int i,j = 0 ;
int nLength = cString.Length ;

for ( i = 0 ; i < nLength; i++)
{
//look for a blank space and once found make the next character to
uppercase
if ((i== 0) || (char.IsWhiteSpace(cString[i])))
{
//Handle the first character differently
if( i==0 ) {j=i;}
else {j=i+1;}

//Make the next character uppercase and update the stringBuilder
sb.Remove(j, 1);
sb.Insert(j, Char.ToUpper(cString[j]));
}
}
return sb.ToString();
}


Preguntas similares