Creación de una cuadrícula en HTML desde una búsqueda de bases de datos -- # campo con performance camp codereview Relacionados El problema

Creating a grid in HTML from a database search


1
vote

problema

Español

Tengo un pequeño pedazo de código que es un poco no partimizado y necesita ayuda con la optimización en este caso.

El procedimiento es buscar en una base de datos utilizando "Condiciones / Condradoo" y cree una cuadrícula usando tablas en HTML con contenido. En la depuración, la siguiente parte está tomando mucho tiempo para completar con 300 resultados o más.

  for (x = 0; x < Campos.Length; x++) {     string concat = "";     for (i = 0; i < 2; i++)     {         if (concat != "")         {             concat += "," + oDrc[y].ItemArray[1].ToString().Trim().Replace("'", "");         }         else         {             concat += oDrc[y].ItemArray[0].ToString().Trim().Replace("'", "");         }     }     if (!pkunica)     {         concat = "";         for (i = 0; i < Pks.Length; i++)         {             if (concat != "")             {                 concat += "," + oDrc[y].ItemArray[i].ToString().Trim().Replace("'", "");             }             else             {                 concat += oDrc[y].ItemArray[i].ToString().Trim().Replace("'", "");             }         }     }   

He subido el código completo para Pastebin . Y sobre algunas palabras, están en PT-BR.

Original en ingles

I have a little piece of code that is a little bit unoptimized and need some help with optimization in this case.

The procedure is to search in a database using "Conditions/Condicao" and create a grid using tables in HTML with content. In debug, the following part is taking a long time to complete with 300 results or more.

for (x = 0; x < Campos.Length; x++) {     string concat = "";     for (i = 0; i < 2; i++)     {         if (concat != "")         {             concat += "," + oDrc[y].ItemArray[1].ToString().Trim().Replace("'", "");         }         else         {             concat += oDrc[y].ItemArray[0].ToString().Trim().Replace("'", "");         }     }     if (!pkunica)     {         concat = "";         for (i = 0; i < Pks.Length; i++)         {             if (concat != "")             {                 concat += "," + oDrc[y].ItemArray[i].ToString().Trim().Replace("'", "");             }             else             {                 concat += oDrc[y].ItemArray[i].ToString().Trim().Replace("'", "");             }         }     } 

I've uploaded the full code to Pastebin. And about some words, they're in PT-BR.

     
   
   

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

Cuando concatenando dentro de los bucles, definitivamente debe usar un 99887776665544330 .

Además, su flujo de programa está por todas partes. Estás ejecutando código y luego borrando los resultados en función de una declaración de IF. ¿Por qué ejecutar ese código en absoluto?

Además, su fragmento de código no funciona completamente. ¿Qué es y aquí? Otro índice de bucle?

Finalmente, StringBuilder concat = new StringBuilder(); if (pkunica) { concat.Append(GetReadableString(oDrc,y,0)); concat.Append(GetReadableString(oDrc,y,1)); } else { if(Pks.Length > 0) { concat.Append(GetReadableString(oDrc,y,0)); } for (i = 1; i < Pks.Length; i++) { concat.Append("," + GetReadableString(oDrc,y,i)); } } string result = concat.ToString(); private string GetReadableString(ODrc oDrc, int oDrcIndex, int itemArrayIndex) //Using a guess here because I have no idea what type any of that is { return oDrc[oDrcIndex].ItemArray[itemArrayIndex].ToString().Trim().Replace("'", "") } 2 es muy duplicado.

  StringBuilder concat = new StringBuilder();  if (pkunica) {         concat.Append(GetReadableString(oDrc,y,0));         concat.Append(GetReadableString(oDrc,y,1)); } else {     if(Pks.Length > 0)     {         concat.Append(GetReadableString(oDrc,y,0));     }     for (i = 1; i < Pks.Length; i++)     {         concat.Append("," + GetReadableString(oDrc,y,i));     } } string result = concat.ToString();   private string GetReadableString(ODrc oDrc, int oDrcIndex, int itemArrayIndex) //Using a guess here because I have no idea what type any of that is {     return oDrc[oDrcIndex].ItemArray[itemArrayIndex].ToString().Trim().Replace("'", "") }   
 

When concatenating inside of loops, you should definitely use a StringBuilder.

Also, your program flow is all over the place. You're executing code and then erasing the results based on an if statement. Why execute that code at all then?

Also, your code snippet doesn't fully work. What is y here? Another loop index?

Finally, oDrc[y].ItemArray[0].ToString().Trim().Replace("'", "") is very duplicated.

StringBuilder concat = new StringBuilder();  if (pkunica) {         concat.Append(GetReadableString(oDrc,y,0));         concat.Append(GetReadableString(oDrc,y,1)); } else {     if(Pks.Length > 0)     {         concat.Append(GetReadableString(oDrc,y,0));     }     for (i = 1; i < Pks.Length; i++)     {         concat.Append("," + GetReadableString(oDrc,y,i));     } } string result = concat.ToString();   private string GetReadableString(ODrc oDrc, int oDrcIndex, int itemArrayIndex) //Using a guess here because I have no idea what type any of that is {     return oDrc[oDrcIndex].ItemArray[itemArrayIndex].ToString().Trim().Replace("'", "") } 
 
 
     
     
12
 
vote

Uso string.Empty en lugar de "" para indicar una cadena vacía. Transmite su intención sin ambigüedad (es decir, nadie pensará que se olvidó de ingresar algo en la cadena).


Cuando se concate en un bucle, use un 9988777665544336 .


Usa nombres significativos. No sé qué concat y oDrc en realidad significa. Ni pkunica , pero eso podría ser un problema de lenguaje (le animo a que se adhiera al inglés solamente).

 

Use string.Empty instead of "" to indicate an empty string. It conveys your intent without ambiguity (i.e.: nobody will think you forgot to enter something in the string).


When concatenating in a loop, use a StringBuilder.


Use meaningful names. I don't know what concat and oDrc actually mean. Nor pkunica, but that might be a language-issue (I'd encourage you to stick to English-only).

 
 
 
 
5
 
vote

Su primer bucle es innecesario, agrega más códigos, y más complejidad, haciéndola un bucle y elimina nada. Un bucle donde la variable de control de bucle no se utiliza debe ser sospechoso.

Usted se está repitiendo, y en el proceso haciendo que su código sea más difícil de leer.

  y0  

debe ser:

  y1  

entonces es claro que la acción es la misma.

Siempre trate de hacer lo más posible en el código común, y no duplicar el código entre las sucursales.

 

Your first loop is unnecessary, you add more code, and more complexity, by making it a loop, and remove nothing. A loop where the loop control variable is unused should be suspect.

You are repeating yourself, and in the process making your code harder to read.

if (concat != "")         {             concat += "," + oDrc[y].ItemArray[i].ToString().Trim().Replace("'", "");         }         else         {             concat += oDrc[y].ItemArray[i].ToString().Trim().Replace("'", "");         } 

Should be:

if (!string.IsEmptyOrNull(concat)) {     concat += ","; // except using a stringbuilder } concat += oDrc[y].ItemArray[i].ToString().Trim().Replace("'", ""); 

It is then clear that the action is the same.

Always try to do as much as possible in the common code, and not duplicate code between branches.

 
 
4
 
vote

(dado cómo se ve su código y el hecho de que está hablando de búsquedas en la base de datos, asumiré ODRC [Y] es un objeto DataRow)

Si está utilizando .NET 4, puede usar LINQ y y2 :

Uso de los siguientes métodos de ayuda:

  y3  

El nuevo cuerpo del método se convierte en:

  y4  
 

(Given how your code looks and the fact you are talking about database searches, I will assume oDrc[y] is a DataRow object)

If you are using .NET 4, you can use LINQ and string.Join:

Using the following helper methods:

private static string GetRowString(DataRow row, int count) {     var rowItems = row.ItemArray.Take(count);     return string.Join(",", rowItems.Select(GetReadableString)); }  private static string GetReadableString(object item) {     return item.ToString().Trim().Replace("'", string.Empty); } 

your new method body becomes:

var count = pkunica ? 2 : Pks.Length; var concat = GetRowString(oDrc[y], count); 
 
 

Relacionados problema

3  Generador de imágenes de Mandelbrot con iteración paralela  ( Mandelbrot image generator with parallel iteration ) 
Actualmente estoy tratando de optimizar esta clase que tengo para la generación fractal. La ecuación está destinada a ser conectable; He usado z => z*z + c ...

2  IMACROS BOT para realizar refrescos  ( Imacros bot for performing refreshes ) 
Estoy tratando de simplificar este código. Parece que todo funciona como debería; Sin embargo, cuando en el bucle de actualización de Imacro, parece un poco i...

1  Integración de oscilador de fase perturbada  ( Perturbed phase oscillator integration ) 
Estoy integrando un sistema de osciladores de fase perturbados. Defino el sistema de ecuación y también la matriz jacobiana. Tengo que remodelar el vector dim...

8  Simple GCD Utility en Java  ( Simple gcd utility in java ) 
i anteriormente discutido El rendimiento se refiere a diferentes algoritmos GCD. Escribí una simple clase de Java que implementa el algoritmo binario GCD. E...

6  Palindrome más largo en una matriz  ( Longest palindrome in an array ) 
Soy nuevo en la programación, y creo que este código podría mejorarse. ¿Alguna sugerencia? 'done'0 ...

5  Memoria / Performance of Merge Sort Code  ( Memory performance of merge sort code ) 
Escribí un código de tipo de combinación para un poco de bocadillo nocturno. Lo he puesto trabajando, pero solo estaba mirando a aprender si me faltaba algo e...

1  Compruebe si dos cadenas son permutación entre sí  ( Check if two strings are permutation of each other ) 
private String sort(String word) { char[] content = word.toCharArray(); Arrays.sort(content); return new String(content); } private boolea...

4  Simulación simple de red neural en C ++ (Ronda 2)  ( Simple neural network simulation in c round 2 ) 
Intro Ayer He publicado esta pregunta . Desde entonces, he actualizado mi código para incorporar estas sugerencias . También he eliminado la dependencia d...

35  Demasiados bucles en la aplicación de dibujo  ( Too many loops in drawing app ) 
Tengo un método que tiene muchos bucles: #ifndef __RUNES_STRUCTURES_H #define __RUNES_STRUCTURES_H /* Runes structures. */ struct Game { char board[2...

5  Encuentre el próximo número Prime - Control de flujo de los bucles anidados 'para `  ( Find the next prime number flow control of nested for loops ) 
Este código funciona perfectamente, pero me molesta. Tener un bucle etiquetado y anidado Bucle, con un Enumerable<T>.Empty()0 Declaración, y un 9988777665...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos