Bonjour � tous,
je suis en train de me poser de s�rieuses questions sur les TMemoryStream.
Je souhaite mettre une grosse quantit� de donn�es en m�moire, afin de les traiter de mani�re rapide en __int64 , en utilisant la pleine puissante de mon processeur 64 bits.
Pour se faire j'utilise la m�thode LoadFromFile pour charger des fichiers, et celle-ci :
__int64 __fastcall CopyFrom(TStream* Source, __int64 Count);
Ok, pas de souci, sauf que :
void __fastcall WriteBuffer(const void *Buffer, int Count);
ne permet d'�crire que 32K de donn�es ??? ( int et pas __int64 )
J'essaye tout de m�me, la limitation de 32K ne semble pas �tre effective, car j'arrive � traiter de grosses quantit�es de donn�es qui d�passent largement les 32K, premi�re surprise, je ne trouve pas l'overload de la fonction en __int64
Seconde surprise, je charge progressivement des fichiers, jusqu'� 230Mo :
1 2 3 4 5 6 7 8
|
// copier ce fichier à la suite dans le bigbuffer
TMemoryStream *a;
a = new TMemoryStream();
a->LoadFromFile(Nom_Fichier);
char *buffer;
buffer = (char*) a->Memory;
this->BigBuffer->WriteBuffer(buffer,a->Size); |
et l� BIM :
Le projet ifs.exe a d�clanch� la classe d'exception EOutOfMemory avec le message "m�moire insuffisante'
What the ... ???
Je teste vite fait pour v�rifier que ce n'est pas un probl�me de limitation windows ou quelque chose dans le genre :
1 2 3 4 5 6 7
|
unsigned __int64 taille = 1024*1024*550;
MegaBuffer = new char[taille];
for (unsigned __int64 i = 0; i < taille; i++)
{
MegaBuffer[i]=0x66;
} |
Ce dernier code fonctionne tr�s bien, en CTRL ALT SUPR je vois bien la m�moire de l'ex�cutable qui monte � plus de 550Mo
Un habitu� des TMemoryStream pourrait-il m'�clairer? je dois rater un truc l�
(La doc embarqu�e sur le C++ Builder ne me donne aucune indication int�ressante ).
Partager