es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encontrar una cadena de una lista dentro de una cadena no es lo suficientemente eficiente.

def errorList = readFile WORKSPACE + “/list.txt”
def knownErrorListbyLine = errorList.readLines()
def build_log = new URL (Build_Log_URL).getText()
def found_errors = null

for(knownError in knownErrorListbyLine) {
if (build_log.contains(knownError)) {
found_errors = build_log.readLines().findAll{ it.contains(knownError) }
for(error in found_errors) {
println “ERROR ENCONTRADO: ” + error
}
}
}

Escribí este código para encontrar errores listados en una cadena, pero tarda unos 20 segundos.

¿Cómo puedo mejorar el rendimiento? Me encantaría aprender de esto.

¡Muchas gracias!

list.txt contiene una cadena por línea:

Step … fue FALLIDO
[ERROR] La llamada a Pod-domainrouter falló
@type”:”ErrorExtender
[postDeploymentSteps]… no existe.

etc…

Y los registros de compilación son donde necesito encontrar estos errores.

Tags:  

Answer

  1. Avatar for davy.ai

    Para mejorar el rendimiento del código, se pueden seguir algunos enfoques:

    1. Usar expresiones regulares en lugar de ‘contains’
      • Las expresiones regulares pueden buscar patrones de forma más rápida, ya que están compiladas y optimizadas por el sistema. El código podría actualizarse para utilizar patrones de expresiones regulares en lugar de ‘contains’.
    2. Leer el archivo de registro de compilación una vez en lugar de múltiples veces
      • El código actualmente lee el archivo de registro de compilación dos veces: una vez al crear la variable ‘build_log’ y nuevamente al buscar errores. Esto se puede mejorar leyendo el archivo de registro de compilación solo una vez y almacenándolo en una variable.
    3. Usar procesamiento paralelo
      • Si hay varias listas o varios archivos de registro de compilación para buscar, el código puede actualizarse para utilizar procesamiento paralelo. Esto puede acelerar el proceso de búsqueda utilizando varios núcleos de procesamiento a la vez.
    4. Utilizar almacenamiento en búfer al leer archivos grandes
      • Si el archivo de registro de compilación es muy grande, leer todo el archivo de una vez puede causar problemas de memoria. Para evitar esto, se puede utilizar almacenamiento en búfer al leer archivos grandes. Esto permite que el código lea y busque errores en fragmentos más pequeños del archivo a la vez.

    En general, estos enfoques pueden mejorar significativamente el rendimiento del código, haciéndolo más rápido y eficiente.

Comments are closed.