kyuseo의 게임 프로그래밍

CFile, HFILE, FILE 대용량 파일 로드(읽기) 속도 비교 실험 본문

C++ 개발

CFile, HFILE, FILE 대용량 파일 로드(읽기) 속도 비교 실험

kyuseo 2008. 1. 6. 17:40

개요..

 

CFile 보다 FILE 가 약 10배 빠르다던 글이 있어서 CFile, HFILE, FILE 대용량 파일 로드(읽기) 속도를 비교, 실험 해 보았습니다.

 

 

실험방식

 

- 약 20M 바이트의 파일 3개의 실험 재료로 준비한다.

- FILE, CFile, HFILE 을 3회 이상 테스트한다.

 

 

코드

 

 

    for( int i=0; i<3; i++ )

    {

        //

        // FILE 을 이용한 읽기 쓰기 시험

        //

        {

            FILE* fp = fopen( "1.dat", "rb" );

 

            fseek( fp, 0, SEEK_END );

            int size = ftell( fp );

            fseek( fp, 0, SEEK_SET );

 

            BYTE* pBuffer = new BYTE[ size ];

 

            DWORD start = GetTickCount();

            fread( pBuffer, size, 1, fp );

 

            CString str;

            str.Format( "FILE %d ms", GetTickCount() - start );

            AfxMessageBox( str );

 

            fclose( fp );

            delete[] pBuffer;

        }

 

        //

        // CFile 을 이용한 읽기 쓰기 시험

        //

        {

            CFile file;

            file.Open( "2.dat", CFile::modeRead );

 

            int size = file.GetLength();

            BYTE* pBuffer = new BYTE[ size ];

 

            DWORD start = GetTickCount();

 

            file.Read( pBuffer, size );

 

            CString str;

            str.Format( "CFile %d ms", GetTickCount() - start );

            AfxMessageBox( str );

 

            file.Close();

            delete[] pBuffer;

        }

 

 

        //

        // HFILE 을 이용한 읽기 쓰기 시험

        //

        {

            HFILE hFile = _lopen( "3.dat",OF_READ );

 

            int size = _llseek( hFile, 0, FILE_END );

            _llseek( hFile, 0, FILE_BEGIN );

 

            BYTE* pBuffer = new BYTE[ size ];

 

            DWORD start = GetTickCount();

            _lread( hFile, pBuffer, size );

 

            CString str;

            str.Format( "HFILE %d ms", GetTickCount() - start );

            AfxMessageBox( str );

 

            _lclose( hFile );

            delete[] pBuffer;

        }

    }

 

    return 0;

}

 

 

결론

 

- 3가지 방식 모두 동일한 속도를 나타냅니다.

 

- 따라서 CFile 의 읽기(Read) 속도가 느리다는 글은 거짓으로 사료됩니다.

 

- 최초 로딩은 디스크에서 읽기 때문에 긴 시간이 소요됩니다.

 

- 이후 로딩은 윈도우 캐시 시스템에 의하여 메모리에   적재된 파일을 읽으므로 짧은 시간이 소요됩니다.

 

 

주의사항

 

- 본 실험은 약점을 지닌 실험방식임을 인정합니다.

 

- 하지만 결과는 일반적이고 올바르다고 판단하고 있습니다.

 

- 의심 있는 분들은 직접 추가 테스트 해보시기 바랍니다.