elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Problema de memoria y CPU al transferir archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de memoria y CPU al transferir archivos  (Leído 2,458 veces)
Isótopo

Desconectado Desconectado

Mensajes: 292


Comprende a los demás para comprenderte a tí mismo


Ver Perfil
Problema de memoria y CPU al transferir archivos
« en: 9 Noviembre 2009, 21:54 pm »

Hola. Estoy codeando una aplicacion cliente-servidor y a la hora de subir archivos la memoria que usa el cliente (el que lo manda) llega a 200 megas y CPU 100%. El archivo se manda pero se colapsa y no me muestra ni las barras de progreso hasta que termina. Aquí tengo el code:

Código:
'Declaraciones
Dim progress As Boolean
Dim nombre As String
Dim path As String
Dim strIndex As String
Dim strData As String
Dim filesize As Long
Dim Size As Long
Dim arrData() As Byte
Dim localpath As String

private sub upload_Click()
'al darle click al boton upload
cd.Filter = "Todos los archivos |*.*"
cd.ShowOpen
Open cd.FileName For Binary Access Read As #1
Size = LOF(1)
ReDim arrData(Size - 1)
'mete el archivo en la matriz
Get #1, , arrData
Close
nombre = cd.FileTitle
path = pathupload.Text
path = path + nombre
localpath = cd.FileName
filesize = FileLen(localpath)
csocketplus.SendData Index, "upl" & "|" & filesize & "|" & path

Private Sub csocketplus_DataArrival(ByVal Index As Variant, ByVal bytesTotal As Long)
csocketplus.GetData Index, strData
'si los datos que recibe corresponde a la confirmacion del servidor para la recepcion del archivo, lo envia.
If strData = "okupl" Then
'activa la barra de progreso
progress = True
csocketplus.SendData Index, arrData

Private Sub csocketplus_SendProgress(ByVal Index As Variant, ByVal bytesSent As Long, ByVal bytesRemaining As Long)
If progress = True Then
'prog_sub es la barra de progreso
prog_sub.Min = 0
'filesize es el numero de bytes del archivo
prog_sub.Max = filesize
prog_sub.value = prog_sub.value + bytesSent
prog_sub.Value = bytes
'cuando los bytes del archivo corresponden con el valor de la barra de progreso, se restablece y se vuelve la bandera a false
If filesize = prog_sub.value Then
prog_sub.Value = 0
progress = False
End If
End If
End Sub

No se cual es el problema que hace que el código funcione pero que haga que se colapse. Aver si encontramos la solucion. Muchas gracias.


En línea


-Asus Crosshair IV Formula            
-AMD Phenom II X6 1090T 3.94Ghz @1.38V
-Corsair H70
-Sapphire Radeon HD 6970 2GB Dual-Fan
-G.Skill PIS PC3-17066 4GB 1900MHz 7-9-7-20 @1.65V
-WD Caviar Black 500GB
-Seagate Barracuda Green 2TB x2
-Antec TruePower New 750W Modular
-Cooler Master Dominator CM-690
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema de memoria y CPU al transferir archivos
« Respuesta #1 en: 10 Noviembre 2009, 02:01 am »

Por favor usa Geshi y da tabulaciones/indecta tu codigo que no se entiende a simple vista nada ademas de verse Mal hecho sin estarlo o tal vez si....

es obvio lo que haces es cargar a lo bruto un archivo en la memoria

Size = LOF(1)
ReDim arrData(Size - 1)

esa variable toma en un peso identico al que ocupa el archivo dado en el hd, lo que puedes hacer es cortar y mandar por tramos dicho archivo ( es decir simular un corte de un archivo dependiendo los bytes deseados en memoria ) y posteriormente mandar ese tramo, al termino cargar otro tramo/pedazo y mandarlo, ( yo habitualmente solo cargo de una rchivo de 1 giga por decir algo solo 255 kbytes a 1 mega en una vaiable y asi los mando de esta forma la memoria no se ve tan incrementada mas de lo que he dicho )



Edito usa una regla de 3 para calcular el proceso en el Progressbar o de lo contrario le crearas un overflow


P.d.: Apoco no te da errores el no cerrar los procesos:  

private sub upload_Click() y csocketplus_DataArrival



Dulces Lunas!¡.


« Última modificación: 10 Noviembre 2009, 02:07 am por ░▒▓BlackZeroҖ▓▒░ » En línea

The Dark Shadow is my passion.
danicasasm

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Problema de memoria y CPU al transferir archivos
« Respuesta #2 en: 10 Noviembre 2009, 05:06 am »

prog_sub.Min yprog_sub.Max sólo deberian modificarse al principio y al final, no cada vez que madifiques el valor.
Para ver la barra de progreso deberias poner DoEvents cada vez que actualizas su valor, si el ordenador va muy saturado no actualiza la barra con suficiente frecuencia.
Doevens permite al windows atender otras tareas a parte del programa, por lo que es muy útil en tareas largas o dentro de bucles.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema de memoria y CPU al transferir archivos
« Respuesta #3 en: 10 Noviembre 2009, 06:23 am »

esto es algo curioso y a la vez tonto, pero yo antes igual lo hacia asi que bueno:

prog_sub.value = prog_sub.value + bytesSent
prog_sub.Value = bytes

no tiene caso...

dulces lunas!¡.
En línea

The Dark Shadow is my passion.
Isótopo

Desconectado Desconectado

Mensajes: 292


Comprende a los demás para comprenderte a tí mismo


Ver Perfil
Re: Problema de memoria y CPU al transferir archivos
« Respuesta #4 en: 10 Noviembre 2009, 22:43 pm »

Si...estoy empezando y tengo muchos fallos de subnormal pero esque ademas el codigo no lo copie tal cual lo tengo sino que le puse algunas cosas que no venian a cuento para intentar que se entendiera. De todas formas creo que ya he encontrado la solucion en el source del file manager de EON... mil gracias a él y a vosotros por responderme, me habeis sido de gran ayuda si tengo alguna duda que no pueda resolver pregunto. Gracias.
En línea


-Asus Crosshair IV Formula            
-AMD Phenom II X6 1090T 3.94Ghz @1.38V
-Corsair H70
-Sapphire Radeon HD 6970 2GB Dual-Fan
-G.Skill PIS PC3-17066 4GB 1900MHz 7-9-7-20 @1.65V
-WD Caviar Black 500GB
-Seagate Barracuda Green 2TB x2
-Antec TruePower New 750W Modular
-Cooler Master Dominator CM-690
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PROBLEMA EN TRANSFERIR DATOS DE UN FICHERO A UN ARRAY EN C.
Programación C/C++
BJM 1 2,454 Último mensaje 12 Enero 2012, 14:37 pm
por do-while
ayuda con mmap, proyeccion de archivos en memoria.
Programación C/C++
antoniosan20 1 1,750 Último mensaje 18 Agosto 2016, 17:20 pm
por AlbertoBSD
transferir archivos
Análisis y Diseño de Malware
Borito30 0 8,087 Último mensaje 10 Octubre 2016, 17:30 pm
por Borito30
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines