Uso de Memoria de Aplicación

Hola, que tal, tengo una duda muy grande
El tema es así, recorro un directorio, y voy añadiendo los archivos a un ListView, pero el tema que se presenta, es que para calcular el tamaño del archivo, utilizo la siguiente linea:
dwLength = (fd.nFileSizeHigh * (MAXDWORD+1)) + fd.nFileSizeLow;
Que esta dentro de un bucle DO, el tema es que cuando comento la linea para que no calcule el tamaño, mi aplicación usa en memoria alrededor de 2-3MB, pero cuando calcula el tamaño de los archivos, el tamaño incrementa a 10 MB, tan solo por hacer el calculo.
La cantidad de Archivos es alrededor de 1500 y estoy usando Visual C 8 (2005)
¿Me podrías explicar a que se debe?
Muchas Gracias
El code que uso, es algo como esto:
WIN32_FIND_DATA fd;
HANDLE hFind;
//ULONGLONG dwLength;
long dwLength;
CString path;
path = = _T("C:\\");
hFind = FindFirstFile(path + _T("*.*"), &fd);
if(hFind != INVALID_HANDLE_VALUE)
{
do
{
if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
if(fd.cFileName == CString(_T("..")) || fd.cFileName == CString(_T(".")))
{
continue;
}
// something
}
else
{
dwLength = (fd.nFileSizeHigh * (MAXDWORD+1)) + fd.nFileSizeLow;
// somthing
}
}
while(FindNextFile(hFind, &fd));
FindClose(hFind);
}

1 Respuesta

Respuesta
1
Es posible que sea por las operaciones, no es lo mismo comparar dos valores que están en memoria que multiplicar, ya que la primera multiplicación se coloca en un temporal en memoria, pero eso no explica los 10Megas, a menos que esos temporales no sean eliminados ya que un DWORD es 32bits y si los temporales no se eliminan entonces sería 1500 temps de 32 bits, con lo que tampoco se alcanzan 10Megas.
Se podría alcanzar esa cantidad si estuvieces utilizando la c++ No determinístico (c++.net) ya que necesita también tener el CLR.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas