• Domingo 22 de Diciembre de 2024, 03:51

Autor Tema:  Duda tamaño de struct  (Leído 2074 veces)

Sined99

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Duda tamaño de struct
« en: Martes 25 de Septiembre de 2012, 10:32 »
0
Hola,
He leido sobre los struct y leo en reiteradas ocasiones que el tamaño de un struct no deberia de sobrepasar de 16Bytes por temas de eficiencia, resulta que mi struct ocupa mas de ese tamaño.
Mi codigo es el siguiente:
Código: [Seleccionar]
public struct VariablesGenerica {
        public ushort varWord0;
        public ushort varWord1;
        public ushort varWord2;
        public ushort varWord3;
        public ushort varWord4;
        public ushort varWord5;
        public ushort varWord6;
        public ushort varWord7;
        public ushort varWord8;
        public ushort varWord9;
        public ushort varWord10;
        public ushort varWord11;
        public ushort varWord12;
        public ushort varWord13;
        public ushort varWord14;
        public ushort varWord15;
        public ushort varWord16;
        public ushort varWord17;
        public ushort varWord18;
        public ushort varWord19;
        public ushort varWord20;
        public ushort varWord21;
        public ushort varWord22;
        public ushort varWord23;
    }

Y luego en otras clases:
Código: [Seleccionar]
// v esta creado como  v = new VariablesGenerica();
  public VariablesGenerica actualizarstructs()
      {
         
         v.varWord0 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord1 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord2 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord3 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord4 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord5 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord6 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord7 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord8 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord9 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord10 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord11 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord12 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord13 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord14 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord15 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord16 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord17 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord18 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord19 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord20 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord21 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord22 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
         v.varWord23 = (ushort)rand.Next(ushort.MinValue, ushort.MaxValue);
          return v;


      }
y en otra clases tengo:
Código: [Seleccionar]
VariablesGenerica vari;
vari= ClaseLoquesea.actualizarstructs();
En mi aplicacion esto ultimo de actualizar la struct se repite ciclicamente cada 200ms
Estoy haciendo pruebas y el tiempo de ejecucion que tengo es de 0ms, y a veces tengo un pico de 15ms,

¿Alguien sabe si puedo tener algun tipo de problema ya sea de eficiencia o algun problema de otro tipo?

Muchas gracias y un saludo.

U2_Caparzo

  • Miembro activo
  • **
  • Mensajes: 45
  • Nacionalidad: cl
  • Super duper divertido xDD
    • Ver Perfil
Re:Duda tamaño de struct
« Respuesta #1 en: Miércoles 3 de Octubre de 2012, 03:10 »
0
Mira, lo de la eficiencia no creo que te afectara mucho en este caso, pasa que la principal diferencia entre Struct y Class es que la primera, al pasar como parametro en algun metodo, se crea una copia, en cambio con una class, es una referencia a la class creada, ahora si una struct pesa demasiado, la copia tardara demasiado y por ende se produciran problemas con el uso de memorio y posiblemente de velocidad.

en tu caso no parece importar demasiado, o nada, ya que lo que haces es editar la struct que ya tienes creada, la editas y luego la devuelves con return, por lo que struct es ideal ya que no se que es lo que haces con "vari".

los structs como dices deben tener un tamaño "limitado", pero cuando deben pasar como parametros, para evitar problemas de memoria y cpu, pero tambien son en casos de aplicaciones de gran tamaño, pero por supuesto es bienvenido ya que es una buena practica en las aplicaciones de menor tamaño.

espero te haya servido mi respuesta  :suerte:
Lo dificil se hace... lo imposible se intenta
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.(Frase de Albert Einstein)

Sined99

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Re:Duda tamaño de struct
« Respuesta #2 en: Miércoles 3 de Octubre de 2012, 09:05 »
0
Hola,
Muchas gracias por contestar, estuve leyendo y leyendo y encuentro opiniones de todo tipo, en mi caso si usase struct nunca la pasaria como parametro lo unico que haria es con la variable "vari" seria por ejemplo:

Código: [Seleccionar]
if(vari.variable1==4){.....
es decir sencillas comprobaciones, tambien hice una prueba con mi estructura de aplicacion y tarda unos 0ms y a veces tiene un pico de 15ms que son aceptables, aun no se lo que voy a hacer seguire investigando un poco.

Me comentas lo de return, justamente lei un comentario que decía que no se debería de devolver una struct en un metodo, por eso te digo que leo opiniones de todo tipo.

De todas formas muchisimas gracias por contestar.

Un saludo.