| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Larrosa Cdt

Registrado: 23 Sep 2004Mensajes: 15
|
Publicado: Mar 15 Feb, 2022 10:33 am Asunto: Leer archivo binario muy grande |
|
|
| Hola a todos, estoy intentando leer un archivo de 5gb y al principio va bien, me situo con fseek en la dirección que quiero leer y todo bien, pero cuando quiero direccionar una posición más grande de 32bits no llega, hay alguna forma de hacerlo con bcb6? |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 15 Feb, 2022 4:18 pm Asunto: |
|
|
Aún cuando no mencionas el proceso del como haces la lectura de un archivo de 5 Gigabytes, por ende NO puedes "subir" un archivo de ese tamaño a memoria es decir si tiene 8Gb de RAM y subes un archivo con fopen() para usar fseek(), literalmente estas "subiendo" los 5Gb a la RAM dejando así 3Gb de RAM para tu SO y la misma aplicación por tal motivo te quedas sin memoria para seguir ejecutando dicho proceso.
Un forma es hacer uso de Stream para "subir" por partes lo que requieres en memoria.
En la documentación de embarcadero tienes este ejemplo: enlace que puede ayudarte.
También es bueno usar el botón buscar del foro, muchas veces son preguntas que ya están contestadas.
Saludos!! _________________
 |
|
| Volver arriba |
|
 |
Larrosa Cdt

Registrado: 23 Sep 2004Mensajes: 15
|
Publicado: Mar 15 Feb, 2022 8:13 pm Asunto: |
|
|
Gracias por responder, he buscado por el foro y por internet llevo unos dias ya, , al final lo he conseguido con CreateFile SetFilePointerEx y ReadFile.
Por cierto me has dejado con una duda, efectivamente antes lo hacia con fopen y fseek y fread, y cuando abro el archivo no veo aumento del consumo de ram, ahora con createfile tampoco pero tu crees que si ejecuto el programa en un PC de 4gb de ram fallará?
Gracias por la ayuda |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 16 Feb, 2022 12:36 am Asunto: |
|
|
El limite de tamaño de un archivo lo da el sistema de formato del disco y el limite de lo que puedes leer lo dan las API y los tipos usados:
| Código: |
2^32 = 4.294.967.296 posiciones de memoria direcionables
2^64 = 18.446.744.073.709.551.616 posiciones de memoria direcionables |
Windows Se encarga de que la cantidad de RAM real de la que dispones te resulte transparente usando memoria virtual. Digamos que si no tienes RAM suficiente, el S.O. dispone del HD y simula que tiene toda la RAM necesaria para la necesidad requerida. La ventaja de tener más RAM real es que usará menos el disco y ganarás en velocidad. De hecho cada aplicación que está ejecutándose, cree que dispone de toda la memoria disponible en del PC, la magia la hace el SO con el sistema de paginación de memoria virtual.
En resumen, a tu Aplicación le da igual cuanta memoria RAM real tiene tu PC, de hecho es un dato que no va a conocer pero que afectará a su rendimiento. Esta es la razón por la que no ves mayor consumo de RAM
Saludos. |
|
| Volver arriba |
|
 |
Larrosa Cdt

Registrado: 23 Sep 2004Mensajes: 15
|
Publicado: Mie 16 Feb, 2022 10:17 am Asunto: |
|
|
Gracias por la aclaración Escafandra, he probado en un pc con 2gb de RAM con un archivo de 5,4gb y puedo leerlo entero, efectivamente rápido no es pero en este caso la velocidad no es importante así que problema solucionado.
Gracias a los dos por vuestro tiempo. |
|
| Volver arriba |
|
 |
|