Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MANULOMM

#71
Nunca pero NUNCA hagas esto si no es absolutamente necesario.
Cita de: seba123neo en 12 Febrero 2010, 01:34 AM
importas
Código (vbnet) [Seleccionar]

Imports System.Runtime.InteropServices


y despues haces:

Código (vbnet) [Seleccionar]
Private Structure Datos
        Dim Nombre As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> _
        Dim Apellido As String
       <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> _
End Structure


saludos.

Lo del StringBuilder esta bueno y ademas consume menos memoria.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#72
lo mejor para esto es utilizar un diccionario, y segundo para hacer la busqueda utiliza linq sera mas rapido.
10 millones es un volumen muy alto para tener en memoria, por que no utilzas un repocitorio fisico, te ingenias algo con estadisticas o simplemente utilizas sql para eso... si lo haces en memoria te recomiendo mires LINQ Paralelo pero esto solo es para .net framework 4

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#73
A mi tambien me parece muy extraño por que salta la librerio de visualbasic? a mi el error me lo tira el mscorlib.dll que es el core del framework y donde estan las excepciones de este tipo....

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#74
bueno pues la naturaleza de las excepciones en .net es que todas hereden de exception.

Hice la prueba a mi me va bien.
aunque este equipo es solo 1GB de Ram + Procesador 1.6 Ghz con Win 7.
y lo que he tenido es que al correr la prueba exactamente igual a la tuya (pero la lista era de Int's). he tenido que se ha lanzado la excepcion y me ha dicho tanto en count como capacity "134217728" pero este numero varia obviamente de las capacidades en hardware del equipo.


de hecho la excepcion que obtengo es de tipo "System.OutOfMemoryException" y pongo un punto de interrupcion el catch y logra parar obviamente despues de un bloqueo de maquina.

es de aclarar que trabajo con c#, en algunos casos los teams de los lenguajes suelen diferenciar algunas cosillas. puede ser una estas diferencias.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#75
mmm si ejecutas el exe te saldra un error de windows y pues claro si estas sin memoria el clr salta una excepcion del Sistema Operativo.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#76
yo diria con el perdon de quienes utilizan VB.

Cita de: nico56 en 25 Enero 2010, 05:19 AM
Visual Basic 2008  >:( >:( porque siguen sacando versiones ? porque no se quedan con vb.net;D
Visual Basic 2008  >:( >:( porque siguen sacando versiones ? porque no se pasan todos a c#...

jejejej esto es sin animo de ofender a nadie.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#77
Te dejo un ejemplo que acabo de hacer.

Código (csharp) [Seleccionar]


//Creamos el Hilo.
        Thread hilo;
        //Esta variable controlara el porcentaje de trabajo realizado por el hilo.
        private static int valor = 0;

        public Form1()
        {
            InitializeComponent();
            //Apuntamos el hilo al metodo que consulta los datos y hace las operaciones.
            hilo = new Thread(new ThreadStart(Datos));
        }

        private void btnComenzar_Click(object sender, EventArgs e)
        {
            //Iniciamos el hilo.
            hilo.Start();
        }

        public void Datos()
        {
            //Esta es la operacion que toma tiempo.
            //Para este ejemplo un bucle con un Sleep de 0.1 segundos.
            for (int i = 0; i < 50; i++)
            {
                //Invocamos el metodo que actualiza la barra de progreso, le pasamos como parametro el
                //numero maximo de la operacion, para el caso de la bd seria el numero maximo de registros.
                this.Progreso(50);
                Thread.Sleep(100);

            }
            MessageBox.Show("Termino el Proceso");
        }

        //Este metodo actualizara la barra de progreso.
        //retorna un int con el fin de utilizar el delegado generico Func.
        //Pero siempre retorna 0.
        public int Progreso(int Max)
        {
            //Hacemos la sincronizacion de hilos.
            //Si no estamos en el Hilo Principal.
            if (prbProgreso.Control.InvokeRequired)
            {
                //Invocamos el hilo principal.
                Func<int,int> delegado = new Func<int,int>(Progreso);
                prbProgreso.Control.Invoke(delegado,Max);
            }
            else
            {
                //Estamos en el hilo principal, actualizamos la barra de progreso y todos los
                //elementos de la interfaz grafica.
                valor++;
                prbProgreso.Value = (valor * 100) / Max;
                lblPorcentaje.Text = prbProgreso.Value.ToString() + "%";
            }
            return 0;
        }



Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#78
Cita de: thedios en 23 Enero 2010, 04:29 AM
oe men yo no escribi pa que me hicieran una tarea sino para ver si puedo mejorar el kodigo vale.....ya yo lo hice..................
pero komo principiante me falta mas de la mitad por aprende vale..ok

AHORA SI ME SUENA A TAREA!!!

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#79
no he leido tu codigo, pero pienso que lo mejor es crear el hilo para la consulta de datos y sincronizas los dos hilos para mostrar un barrita de progeso... si eso te sirve yo podria ayudarte...

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
#80
jejejeje.. y que llevas hecho?...
NO SE HACEN TAREAS!!!

Atentamente,

Juan Manuel Lombana
Medellín - Colombia