Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + Tecnología especializada
DXST - SAST - IAST - SCA - DevSecOps
Caja blanca - Caja gris - Caja negra
Atacando Aplicaciones Web, APIs, Apps Móviles,
Cliente Servidor, Servidores, Redes, Dispositivos IoT
IoT SCI: Sistemas de Control Industrial

Reutilizar objetos en bucles

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en ASP.NET al reutilizar objetos ya creados. Ésto mejorará el rendimiento de la aplicación, permitiendo administrar el tiempo de creación del objeto en otras tareas importantes.

Necesidad

Reutilizar objetos dentro de un bucle de un programa en ASP.NET.

Contexto

A continuación se describe las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando una aplicación en ASP.NET.

  2. El código debe utilizar contenedores o estructuras de datos optimizadas.[1]

Solución

  1. Teniendo en cuenta que ASP.Net usa recolector de basura, y sumado a las características del contexto anterior, se tienen las siguientes implicaciones [2]:

    • Cada objeto al ser creado requiere recursos de memoria para sus variables de instancia.

    • Cada objeto al ser creado requiere recursos de procesador para inicializar las variables de instancia.

    • Cada objeto creado es evaluado para determinar si debe ser eliminado.

    • Cada objeto creado podrá ser eliminado en algún momento.

  2. Dadas las anteriores circunstancias se recomienda reutilizar los objetos creados en un bucle de forma que los recursos demandados por las implicaciones anteriores se minimicen. El siguiente ejemplo ilustra como reutilizar objetos. Inicialmente se define una clase con el método main, dentro del cual se crea una instancia de la clase StringBuilder:

    Para utilizar la clase StringBuilder se debe incluir el espacio de nombres System.Text. Para ello se importan las librerías System y System.Text:

    test.py
    1
    2
    using System;
    using System.Text;
    
  3. Posteriormente, se instancia un objeto de la clase StringBuilder, en este caso el objeto sb:

    1
    2
    3
    4
    static void Main(string[] args)
            {
          StringBuilder sb;
    ...
    
  4. A pesar de que la clase StringBuilder instancia siempre un objeto dinámico que permite expandir el número de caracteres de la cadena que encapsula, es posible definir un valor personalizado para el número máximo de caracteres que puede contener. El valor anteriormente mencionado se define como la capacidad del objeto y difiere de la longitud de la cadena contenida en el objeto StringBuilder en dicho momento[3].

    De acuerdo a lo anteriormente dicho, se reutilizará el objeto haciendo uso de un bucle for. De esta manera se evitará instanciar nuevos objetos, al definir el número de veces que el objeto será reutilizado. En este caso se inicializará un ciclo de 40 iteraciones. A continuación se presenta una porción de código con el procedimiento descrito:

    1
    2
    3
    4
    int limit = 41;
    //long startTime = System.currentTimeMillis ();
    for (int i = 0; i < limit; i++) {
    ...
    
  5. Por cada iteración, se está reutilizando la instancia, con el método Clear() se cambia el estado del objeto de modo similar a uno recién creado, sin necesidad de realmente crear uno nuevo.




Haz un comentario

Estado de los servicios - Términos de Uso