Alchemyで使用しているCプロジェクトがあります。プロジェクトには、swfbridgeを使用して実行したいビルド後のコマンドラインテストがいくつかあります。
これらのテストは実行されますが、非常に低速です。問題は、適度に大きなファイル(〜3MB)をメモリに読み込むことです。通常のAlchemyを介して同じファイルでこれらの同じテストを実行する(たとえば、swfbridgeを使用せず、ASからのsupplyFileを使用する)のは非常に高速です。
ボトルネックはswfbridgeだと思います。より具体的には、swfbridgeがファイルをロードする方法です。それらを読み込み、ローカルホスト接続を介して1024バイトのチャンクでメインの錬金術swfに送信します。(これはswfbridge.logで確認できます。)
私の質問は、swfbridgeをより効率的にする方法はありますか?たとえば、別のチャンクサイズを使用させることはできますか?
ファイル読み取りコードの例を次に示します。このコードに約3MBのファイルを指定すると、実行速度が非常に遅くなります。
#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;
}