将棋プログラミング

(将棋に関する)ソフトウェア開発のノウハウ等。

MFC によるネットワークのデータ受信の高速化

次のコードで、ネットワークの 約8MB のテキストデータを受信していた。

    CHttpFile* pFile;
    (省略)
    CString strContent;
    CString LINE_SEPARATOR = "\r\n";
    CString buf;
    while (pFile->ReadString(buf)) {
        strContent += buf;
        strContent += LINE_SEPARATOR;
    }

Visual Studio 2005 で実行していた時は、25,000 ms かかっていた。
このプログラムを Visual Studio 2013 でビルドし、実行したところ、58,000 ms と2倍以上かかるようになった。
ReadString(CString) が遅いと思われるので、次のように書き換えた。

    CString strContent;
    TCHAR * buf = new char[DATA_SIZE];
    for (;;) {
        int result = pFile->Read(buf, DATA_SIZE);
        if (result <= 0)
            break;
        buf[result] = 0x00;
    }
    strContent = buf;
    delete[] buf;

その結果、Visual Studio 2005 と Visual Studio 2013 のいずれで実行しても 8,000 ms と大幅に高速化できた。