J'ai un projet C que j'utilise avec Alchemy. Le projet a des tests de ligne de commande post-construction que j'aimerais utiliser avec swfbridge.swfbridge et de gros fichiers
Ces tests s'exécutent, mais ils sont extrêmement lent. Le problème est qu'ils lisent des fichiers modérément volumineux (~ 3 Mo) en mémoire. L'exécution de ces mêmes tests avec les mêmes fichiers via une Alchemy régulière (par exemple, en n'utilisant pas swfbridge mais en utilisant supplyFile d'AS) est très rapide.
Je pense que le goulot d'étranglement est le swfbridge. Plus spécifiquement, de la manière dont swfbridge charge les fichiers. Il les lit et les transmet en fragments de 1024 octets à travers la connexion localhost au swf d'alchimie principal. (Vous pouvez le voir dans swfbridge.log.)
Ma question est la suivante: y a-t-il un moyen de rendre swfbridge plus efficace? Puis-je utiliser une taille de bloc différente, par exemple?
Voici un exemple de code de lecture de fichier. Si vous donnez à ce code un fichier ~ 3MB, il exécutera très lentement.
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
size_t filesize(const char filename[]) {
struct stat stbuf;
if (stat(filename, &stbuf) == -1) {
fprintf(stdout, "file_size: can't find %s\n...\n", filename);
return (-1);
}
return stbuf.st_size;
}
int main(int argc, char **argv) {
const char *filename= argv[1];
size_t size= filesize(filename);
printf("allocating %d bytes \n", size); fflush(stdout);
char *data= (char*)malloc(size);
printf("reading %d bytes \n", size); fflush(stdout);
FILE *file= fopen(filename, "r");
fread(data, size, 1, file);
printf("done \n"); fflush(stdout);
free(data);
fclose(file);
return 0;
}