ifstream getline vs fgets vs fread 속도 측정
프로그래밍 언어/C++2014. 1. 13. 18:27
어느 블로그에서 ifstream getline 이 fgets보다 빠르다고 썰이 올라왔길래 말도 안되는 소리라 생각하고 소스를 간단히 짠 후 테스트 해보았다.. 역시나 ifstream은 쓸것은 못되더라는.......;;
테스트 파일은 약 15MB 정도의 일반적인 로그파일 데이터로 테스트 하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | // ConsoleApplication1.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include "CodeTimer.h" #include #define TEST_FILE "c:\\1.log" #define BUF_SIZE 1024 /* ----------------------------------- ifstream getline() 함수 ----------------------------------- */ void IFSTREAM_GETLINE() { ifstream inFile(TEST_FILE, ios::in | ios::binary); if (!inFile.is_open()) exit(1); char buf[BUF_SIZE] = { 0, }; while (!inFile.getline(buf, sizeof(buf)).eof()) { } inFile.close(); } /* ----------------------------------- fread() 함수 ----------------------------------- */ void FREAD_TEST() { FILE *fp = fopen(TEST_FILE, "rb"); if (NULL == fp) exit(1); char buf[BUF_SIZE] = { 0, }; size_t len = 0; while (!feof(fp)) { len = fread(buf, sizeof(buf[0]), sizeof(buf) / sizeof(buf[0]), fp); } fclose(fp); } /* ----------------------------------- fgets() 함수 ----------------------------------- */ void FGET_TEST() { FILE *fp = fopen(TEST_FILE, "rb"); if (NULL == fp) exit(1); char buf[BUF_SIZE] = { 0, }; while (NULL != fgets(buf, sizeof(buf), fp)) { } fclose(fp); } int _tmain(int argc, _TCHAR* argv[]) { CodeTimer timer; timer.Begin(); IFSTREAM_GETLINE(); timer.End(); printf("ifstream::getline() : %f\n", timer.GetCodeTime() ); timer.Begin(); FGET_TEST(); timer.End(); printf("fgets() : %f\n", timer.GetCodeTime()); timer.Begin(); FREAD_TEST(); timer.End(); printf("fread() : %f\n", timer.GetCodeTime()); getchar(); return 0; } |
코드 구동 시간 측정 클래스 소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #pragma once #include class CodeTimer { public: VOID Begin() { QueryPerformanceFrequency(&frequency); // 주파수(1초당 증가되는 카운트수)를 구한다. QueryPerformanceCounter(&startCounter); // 코드 실행 전 카운트를 구한다. } VOID End() { QueryPerformanceCounter(&endCounter); // 코드 실행 후 카운트를 구한다. } double GetCodeTime() { return (double)(endCounter.QuadPart - startCounter.QuadPart) / (double)frequency.QuadPart; } private: LARGE_INTEGER startCounter, endCounter, frequency; }; |
<normal read>
<binary read>
'프로그래밍 언어 > C++' 카테고리의 다른 글
regex 정규필터식 간단 구문 예제 (0) | 2014.01.16 |
---|---|
CRT의 디버그 기능으로 메모리 누수 디버깅하기 (Memory Leak) (9) | 2014.01.15 |
C/C++ 코드 최적화 팁 (5) | 2014.01.12 |
윈도우 실행파일 PE 구조 (0) | 2013.12.26 |
error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. (0) | 2013.11.26 |