canal visual basic .net

Recursos Visual Basic.NET, VB.NET, Manuales de programación, Tutoriales, Foros de programación, Comunidad de programadores

Usuarios activos:  41

Foros de programación, recursos, tutoriales, sistemas operativos...

Bienvenido a la zona de foros. Participa en alguno de nuestros foros: Foros de visual basic, foros de visual basic.net foros de Crystal reports, programas gratis, foros de C++ - C# , foros de Java, foros de PHP, foros de ASP.net. Seguro que hay un foro que te servirá de gran utilidad y si no lo encuentras avísanos y crearemos uno nuevo.
Resultados 1 al 7 de 7
  1. #1
    Jamec está desconectado Moderador Veteran@
    Fecha de ingreso
    29 dic, 05
    Ubicación
    Costa Rica
    Mensajes
    558

    Predeterminado



    Es una duda que siempre me a pasado por la mente, que es más optimo crear copias de objectos en tiempo de diseño o en tiempo de ejecución, esto tomando en cuenta que uno crea los objetos antes de hacer visible el formulario y luego hace visible el formulario.


    Eso si tomando en cuenta el tiempo hasta que termina de cargar.


    Nose si me explicado bien, sino con gusto replantearé lo anterior.
    Solo hay dos cosas infinatas: El Universo y la estupides humana; y del Universo no estoy seguro.
    Albert Einstein

  2. #2
    CesarMauricio está desconectado Senior Member Avanzad@
    Fecha de ingreso
    16 ene, 06
    Mensajes
    170

    Predeterminado

    Bueno, si nos referimos a velocidad siempre será más veloz el objeto creado en tiempo de ejecución...ahora una pregunta ¿Cuando en .NET un objeto es creado en tiempo de diseño? la Respuesta...NUNCA!!! parece curioso no? pero es así, esto se debe a la modificación del método constructor "NEW" y del eterno "FINALIZE". Ahora los objetos tienen una finalización 'no determinista' ya que nosotros nunca conocemos cuando se finalizan. Si observas el código de un formulario verás que los objetos son creados cuando se instancia la clase por ejemplo:

    Supongamos un formulario llamado Form1 y con un TextBox insertado en él el codigo generado es el siguiente.

    Código:
    1. Public Class Form1
    2.  Inherits System.Windows.Forms.Form
    3.  
    4. #Region " Código generado por el Diseñador de Windows Forms "
    5.  
    6.  Public Sub New()
    7.  MyBase.New()
    8.  
    9.  'El Diseñador de Windows Forms requiere esta llamada.
    10.  InitializeComponent()
    11.  
    12.  'Agregar cualquier inicialización después de la llamada a InitializeComponent()
    13.  
    14.  End Sub
    15.  
    16.  'Form reemplaza a Dispose para limpiar la lista de componentes.
    17.  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    18.  If disposing Then
    19.    If Not (components Is Nothing) Then
    20.    components.Dispose()
    21.    End If
    22.  End If
    23.  MyBase.Dispose(disposing)
    24.  End Sub
    25.  
    26.  'Requerido por el Diseñador de Windows Forms
    27.  Private components As System.ComponentModel.IContainer
    28.  
    29.  'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
    30.  'Puede modificarse utilizando el Diseñador de Windows Forms.
    31.  'No lo modifique con el editor de código.
    32.  Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    33.  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    34.  Me.TextBox1 = New System.Windows.Forms.TextBox
    35.  Me.SuspendLayout()
    36.  '
    37.  'TextBox1
    38.  '
    39.  Me.TextBox1.Location = New System.Drawing.Point(92, 48)
    40.  Me.TextBox1.Name = "TextBox1"
    41.  Me.TextBox1.TabIndex = 0
    42.  Me.TextBox1.Text = "TextBox1"
    43.  '
    44.  'Form1
    45.  '
    46.  Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
    47.  Me.ClientSize = New System.Drawing.Size(292, 273)
    48.  Me.Controls.Add(Me.TextBox1)
    49.  Me.Name = "Form1"
    50.  Me.Text = "Form1"
    51.  Me.ResumeLayout(False)
    52.  
    53.  End Sub
    54.  
    55. #End Region
    56.  
    57. End Class


    Como verás el método constructor New es donde se realizan las declaración de todos los controles "objetos" que vayamos insertando en él, por lo tanto cuando invoquemos a este metodo en la declaración
    Código:
    1. 'una forma
    2. Dim frmPrueba as New Form1
    3.  
    4. 'otra forma
    5. dim frmPrueba as Form1
    6. frmPrueba = New Form1

    todo los objetos que hayamos creado en tiempo de diseño serán dibujados (y almacenados en la memoria principal de la aplicación), creando así una mayor lentitud en la respuesta del formulario, no en la visualización sino en la instanciación es muy importante que tengas esto presente..!!! Muchos confunden que porque tienen muchos controles en el formulario este es mas lento y no es por la cantidad de controles esto esta relacionado con la gdi que utiliza el sistema operativo. Como solucionamos esto:

    hacemos la siguiente declaración fuera del NEW del formulario y luego lo agregamos al form
    Código:
    1. Friend WithEvents TextBox1 As System.Windows.Forms.TextBox

    de esta manera estamos utilizando memoria caché y será más veloz.

    Como verás agregar controles en tiempo de diseño lo que hacemos indirectamente es "agregar este código al método New" (lo pongo entre comillas porque como verás es una forma de decir).

    Al llamar al método show todos los controles que esten dentro del formulario ya fueron instanciados y asignadas todas sus propiedades.

    Código:
    1. 'TextBox1
    2.  
    3.  '
    4.  
    5.  Me.TextBox1.Location = New System.Drawing.Point(92, 48)
    6.  
    7.  Me.TextBox1.Name = "TextBox1"
    8.  
    9.  Me.TextBox1.TabIndex = 0
    10.  
    11.  Me.TextBox1.Text = "TextBox1"

    Ahora lo segundo ¿que es mas optimo? yo creo que depende mucho del tipo de proyecto del que hablamos. Si es un proyecto de gestión de datos no veo la diferencia. Ahora bien...si lo que necesitamos es crear una "dll" que luego se utilizada por otros proyectos creo que la flexibilidad que da instanciar las clases en tiempo de ejecución no te la da cuando lo haces en tiempo de diseño. Asi que es un punto más a favor, también hay una diferencia muy sustancial en cuanto a la administración de memoria que hace .Net

    Por ejemplo los objetos que son declarados en el InitializeComponent() son almacenados en la memoria principal de la aplicación, esto lo maneja el Framework y no podemos hacer nada para modificarlo. LLamada también MEMORIA PRINCIPAL.

    Y los objetos creados en tiempo de ejecución son administrados por memoria cache especiales, llamados también MEMORIA SECUNDARIA. Como sabemos lo que esta almacenado en un cache es mucho mas rápido que aquello que esta en memoria ram, te paso un articulo para que lo leas...

    "Un caché es un
    sistema especial de almacenamiento de alta velocidad. Puede ser tanto
    un área reservada de la memoria principal como un dispositivo de
    almacenamiento de alta velocidad independiente. Hay dos tipos de caché
    frecuentemente usados en las computadoras personales: memoria caché y
    caché de disco. Una memoria caché, llamada tambien a veces
    almacenamiento caché ó RAM caché, es una parte de memoria RAM estática
    de alta velocidad (SRAM) más que la lenta y barata RAM dinámica (DRAM)
    usada como memoria principal. La memoria caché es efectiva dado que los
    programas acceden una y otra vez a los mismos datos o instrucciones.
    Guardando esta información en SRAM, la computadora evita acceder a la
    lenta DRAM.
    Cuando un dato es encontrado en el caché, se dice que se ha producido
    un impacto (hit), siendo un caché juzgado por su tasa de impactos (hit
    rate). Los sistemas de memoria caché usan una tecnología conocida por
    caché inteligente en el cual el sistema puede reconocer cierto tipo de
    datos usados frecuentemente. Las estrategias para determinar qué
    información debe de ser puesta en el caché constituyen uno de los
    problemas más interesantes en la ciencia de las computadoras. Algunas
    memorias caché están construidas en la arquitectura de los
    microprocesadores. Por ejemplo, el procesador Pentium II tiene una
    caché L2 de 512 Kbytes.
    El caché de disco trabaja sobre los mismos principios que la memoria
    caché, pero en lugar de usar SRAM de alta velocidad, usa la
    convencional memoria principal. Los datos más recientes del disco duro
    a los que se ha accedido (así como los sectores adyacentes) se
    almacenan en un buffer de memoria. Cuando el programa necesita acceder
    a datos del disco, lo primero que comprueba es la caché del disco para
    ver si los datos ya estan ahí."

    Ahora bien volviendo a nuestro ejemplo...del form1 si el textbox es creado en el NEW no utilizará la memoria caché...pero si es utilizado fuera si la utilizará...pero cuidado porque si haces uso execibo de la caché esta puede desbordarse y hace uso de la "cache de disco" y es lo peor que te puede pasar ya que el disco trabaja a una velocidad mécanica y la memoria RAM a una electonica y es muchisimo mas rápida. En cambio si haces una dll para acceder a los datos necesitas que esta sea lo mas veloz posible por lo tanto necesitas instanciar tus objetos en tiempo de ejecución.

    Bueno, espero que esto aclaré aunque sea un poquito tus dudas...creo que me prolongue un poco...pero bueno, es lindo justificar las respuestas no?

    Resumiendo: Cuando necesites que algo sea lo más rápido posible tenés que crear tus objetos en tiempo de ejecución. Pero cuidado que si lo haces de forma excesiva también infringis un tema de seguridad...otro punto a tener en cuenta....

    Como verá es un tema larguisimo....

    Suerte.
    Espero que te sirva...Saludos

    CesarMauricio

  3. #3
    Avatar de Guspo_pk
    Guspo_pk está desconectado Member Iniciad@
    Fecha de ingreso
    05 ene, 07
    Ubicación
    Colombia
    Mensajes
    32

    Predeterminado

    Actualmente estoy desarrollando un juego en Visual Basic. El juego consiste en controlar un tanque y destruir vehiculos enemigos, entrar en su base y destruirla junto con otros tanques aliados. El juego consta de un formulario(campo de batalla), shapes(obstaculos) y images(vehiculos, bases).
    Desde que comence a desarrollar el juego surgieron algunas dudas. Una de ellas era si crear los vehiculos en tiempo de ejecucion; pero habia un problema y era que yo no sabia crear objetos de esta forma, todo lo hago en vista de diseño. Es muy probable de que cuando termine el juego corra un poco lento, ¿alguien podria ayudarme?

  4. #4
    Critico está desconectado Junior Member Iniciad@
    Fecha de ingreso
    09 dic, 05
    Mensajes
    20

    Predeterminado

    Hola,
    Pues yo no estoy deacuerdo con la explicacion que ha dado CesarMauricio. Quizas me equivoque, pero yo opino que tanto si creas el objeto en tiempo de diseño o en tiempo de ejecucion, se almacena siempre en la mas lenta y barata memoria DRAM. No se en las placas de ahora, pero antes solo el micro y el disco duro llevaba memoria cache, pero de todas maneras, su uso no lo controla el programa o la manera de crear los objetos, la controla el sistema operativo, el micro o el disco duro.
    Yo opino que los objetos creados en tiempo de diseño son mas rapidos pero todos los que crees se cargan asi que si creas objetos que quizas no vayas a utilizar, el tiempo de carga y gasto de recursos de estos puede relentizar el programa, asi que todo es cosa de saber cual es el mejor metodo para cada objeto que necesites.
    Saludos.

  5. #5
    Vanchi está desconectado Moderador Veteran@
    Fecha de ingreso
    09 dic, 05
    Mensajes
    740

    Predeterminado

    Güenas,

    También yo siempre tuve esa duda. Para resolverla simplemente hice un programa con 1400 picturebox creados en modo de diseño y la misma cantidad creados en ejecución.

    El tiempo empleado fue bastante parecido, pero había un inconveniente. Mientras que en tiempo de diseño se especificaban posiciones el que creaba en tiempo de ejecución los ponía sin ubicación.

    De modo que hice una rutina para que leyendo el archivo ".frm" del proyecto "Estático" genere el código para hacer lo mismo pero dinámicamente. (En realidad sólo copiaba las propiedades Left y Right).

    El código generado debía ser estático (no debía tener bucles) ni evaluadores para no incluir demoras que NO fueran por la creación, quedando más o menos así:

    Código:
    1. Load Picture1(1)
    2. Picture1(1).Visible = True
    3. Picture1(1).Left = 12600
    4. Picture1(1).Top = 6120

    El resultado final fue brutal por decirlo de algún modo. El proyecto que generaba los controles dinámicamente tardaba MUCHÍSIMO más que el otro.

    Se preguntarán ¿Cuanto es "muchísimo?. Bueno, yo pensaba crear un tercer programa que llame a estos 2 proyectos y que tome el tiempo que tardaban en abrirse y cerrarse ya que yo creí (erroneamente) que el tiempo empleado por ambos proyectos sería más o menos similar. Al ser tan abismal la diferencia ya dejó de ser cuantitativa para ser cualitativa y no fue necesario ese 3º programa

    PD: Un detalle que no es menor es que el tamaño del proyecto que crea los picturebox en tiempo de diseño es de 72 kB, mientras que el que lo hace en tiempo de ejecución ocupa 1,42 MB.
    Iván (Vanchi) La Malfa
    OpenOffice.org
    .Free as in Freedom.

  6. #6
    moni_29 está desconectado Member Iniciad@
    Fecha de ingreso
    05 oct, 11
    Mensajes
    53

    Predeterminado

    muchas gracias por la ayuda. a mi me pasaba lo mismo pero gracias a ustedes ya lo pude solucionar









    alquileres cordoba

  7. #7
    lomarquez está desconectado Junior Member Iniciad@
    Fecha de ingreso
    01 dic, 11
    Mensajes
    11

    Predeterminado

    Muchas gracias por el aporte. Es excelente. Me interesaba mucho tener esta información para poder solucionar un problema que tenía y ya lo pude hacer!








    tiendas de muebles

Temas similares

  1. Crear objetos en tiempo de ejecucion
    Por lestad en el foro Visual Basic .NET
    Respuestas: 0
    Último mensaje: 26/09/2006, 02:31
  2. Crear Objetos ejecucion y moverlos
    Por Guests en el foro Visual Basic .NET
    Respuestas: 0
    Último mensaje: 01/09/2006, 04:14
  3. Crear Objetos en Tiempo de ejecucion
    Por Zitro en el foro Sistema
    Respuestas: 2
    Último mensaje: 31/07/2006, 21:32
  4. duda creacion objetos tiempo de ejecucion
    Por Guests en el foro Visual Basic 6.0
    Respuestas: 2
    Último mensaje: 06/06/2006, 19:16
  5. ControlUsuario, detectar diseño o ejecuci
    Por Leandro en el foro Visual Basic 6.0
    Respuestas: 1
    Último mensaje: 03/05/2006, 05:48

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Visual Studio .VisualBasic.net .ADO.NET .ASP.NET .Framework .Crystal report
[Visual Basic .NET · Información legal · Condiciones de uso · Publicidad · Contacto · RSS novedades Foro · Inicio]
Un sitio web de Internelia (Ontecnia) © Copyright 2013 canalvisualbasic.net. Todos los derechos reservados