»ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸®ÀÇ ¾çÀÌ ÀÌ·ÐÀûÀ¸·Î ¹«ÇÑ´ë°¡ µÇ¾úÀ¸¸ç ½ÇÁúÀûÀ¸·Îµµ ¼ö½Ê MB Á¤µµÀÇ ÅؽºÆ®´Â °Å¶áÈ÷ ºÒ·¯ ¿Ã ¼ö ÀÖ°Ô µÇ¾ú´Ù. ÀÌ·¸°Ô µÇ¸é ÀÛÀº ÆÄÀÏÀ» ÆíÁýÇÒ ¶§´Â Àß ´À³¢Áö ¸øÇß´ø ¼ÓµµÀÇ ÀúÇϸ¦ ´Ù½Ã °æÇèÇÒ ¼ö ÀÖ°Ô µÇ´Âµ¥ ÀÌ ÁîÀ½¿¡¼ Áß°£ ÃÖÀûÈ°¡ ÇÊ¿äÇÏ´Ù. À̹ø ÃÖÀûÈ´Â ÁÖ·Î Å« ÆÄÀÏÀ» ÆíÁýÇÒ ¶§ÀÇ ½Ã°£À» ´ÜÃà½ÃÅ°´Â µ¥ ÁßÁ¡À» µÎ´Âµ¥ ÈξÀ ´õ Á¤±³ÇÏ°í º¹ÀâÇÏÁö¸¸ ´çÀå ´«¿¡ ¶é ¸¸ÇÑ Å« È¿°ú´Â ±â´ëÇϱ⠾î·Æ´Ù.
1Â÷ ÃÖÀûÈ ¶§´Â ¼öõ ¹èÀÇ ¼Óµµ Çâ»ó È¿°ú°¡ ÀÖ¾úÁö¸¸ Áß°£ ÃÖÀûÈ´Â ±â²¯ÇØ¾ß 2¹è ³»Áö´Â 10¹è Á¤µµÀÇ ¼Óµµ Çâ»ó È¿°ú°¡ ÀÖÀ» °ÍÀÌ´Ù. ±×·¡µµ 2¹è¸¸ »¡¶óÁ®µµ ¾ó¸¶³ª ´ÙÇàÀΰ¡? ¸¶Áö¸· ÃÖÀûÈ ¶§´Â ºÒ°ú ¸î % Çâ»óÀ» À§ÇØ Äڵ带 °íÃÄ¾ß Çϴµ¥ Áß°£ ÃÖÀûÈ´Â ±×·¡µµ ±×¿¡ ºñÇÑ´Ù¸é È¿°ú°¡ ¸¹Àº ¼ÀÀÌ´Ù. ±Ùº»ÀûÀ¸·Î ±¸Á¶¸¦ ¶â¾î °íÄ¡Áö´Â ¾ÊÀ¸¸ç ºÒÇÊ¿äÇÑ µ¿ÀÛÀ» »ý·«ÇÔÀ¸·Î½á ½Ã°£À» ´ÜÃà½ÃÅ°´Â ¹æ¹ýÀ» ¸¹ÀÌ »ç¿ëÇÏ°Ô µÉ °ÍÀÌ´Ù.
Áß°£ ÃÖÀûȸ¦ Çϱâ Àü¿¡ ¸î °¡Áö ÀÛ¾÷ Áغñ¸¦ Çϵµ·Ï ÇÏÀÚ. Å« ÆÄÀÏÀ» ÆíÁýÇÒ ¶§ ¾î¶² Á¡ÀÌ ¹®Á¦°¡ µÇ°í ¾îµð°¡ ¹®Á¦°¡ µÇ´ÂÁö¸¦ Á¶»çÇØ¾ß ÃÖÀûÈ ´ë»óÀ» Á¦´ë·Î ¹°»öÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¼º´É Á¡°ËÀ» À§ÇÑ °£´ÜÇÑ Áغñ¸¦ Çصΰí ÀÛ¾÷À» ½ÃÀÛÇÑ´Ù. ¸ÕÀú ´ÙÀ½ ¼Óµµ ÃøÁ¤ ¸ÅÅ©·Î¸¦ ¼Ò½ºÀÇ ¼±µÎ¿¡ ºÙ¿©³Ö´Â´Ù.
#define STARTQ TCHAR qMes[256];\
static qcount=0;\
LARGE_INTEGER qs,s1,s2,s3,qe,qfreq;\
double g1,g2,g3,ge;\
QueryPerformanceFrequency(&qfreq);\
QueryPerformanceCounter(&qs);\
s1=s2=s3=qs;
#define SPOT1 QueryPerformanceCounter(&s1);
#define SPOT2 QueryPerformanceCounter(&s2);
#define SPOT3 QueryPerformanceCounter(&s3);
#define ENDQ QueryPerformanceCounter(&qe);\
g1=((double)(s1.QuadPart-qs.QuadPart))/((double)qfreq.QuadPart);\
g2=((double)(s2.QuadPart-qs.QuadPart))/((double)qfreq.QuadPart);\
g3=((double)(s3.QuadPart-qs.QuadPart))/((double)qfreq.QuadPart);\
ge=((double)(qe.QuadPart-qs.QuadPart))/((double)qfreq.QuadPart);\
sprintf(qMes, "%04d : S1=%.6f,S2=%.6f,S3=%.6f,QE=%.6f\r\n",++qcount,g1,g2,g3,ge);\
OutputDebugString(qMes);
³»¿ëÀ» º¸¸é ¾Ë°ÚÁö¸¸ ÀÌ ¸ÅÅ©·Î´Â ƯÁ¤ ÁöÁ¡ÀÇ ½ÇÇà ½Ã°£À» ÃøÁ¤ÇÏ¿© µð¹ö±ë Á¤º¸·Î Ãâ·ÂÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. µð¹ö±ë Á¤º¸´Â ÄÄÆÄÀÏ·¯ÀÇ Ãâ·Ââ(Output)¿¡ ¹®ÀÚ¿·Î ³ªÅ¸³´Ù. ½Ã°£À» ÃøÁ¤ÇÏ°í ½ÍÀº °÷ÀÇ ¼±µÎ¿¡ STARTQ ¸ÅÅ©·Î¸¦ »ðÀÔÇÏ°í ÀÛ¾÷ ¿Ï·á ½ÃÁ¡¿¡ ENDQ ¸ÅÅ©·Î¸¦ »ðÀÔÇÏ¸é µÎ ÁöÁ¡°£ÀÇ °æ°ú ½Ã°£ÀÌ µð¹ö±ë Á¤º¸·Î Ãâ·ÂµÈ´Ù. Áß°£¿¡ ½Ã°£ Á¡°Ë ÁöÁ¡À» ¼¼ ±ºµ¥ ´õ µÑ ¼ö ÀÖÀ¸¹Ç·Î ÃÖ´ë 4±ºµ¥ÀÇ ½Ã°£À» ÃøÁ¤ÇÒ ¼ö ÀÖ´Ù. »ç¿ë ¿¹¸¦ º¸ÀÌ¸é ´ÙÀ½°ú °°´Ù.
STARTQ
ÇÔ¼ö1È£Ãâ
SPOT1
ÇÔ¼ö2È£Ãâ
SPOT2
¿¬»ê½Ä
ENDQ
ÀÌ ¸ÅÅ©·Î¿¡ ÀÇÇØ ÇÔ¼ö1 È£Ãâ ÈÄÀÇ °æ°ú ½Ã°£°ú ÇÔ¼ö 2 È£Ãâ ÈÄÀÇ °æ°ú ½Ã°£, ¿¬»ê½Ä ½ÇÇà ÈÄÀÇ °æ°ú½Ã°£À» Á¶»çÇÒ ¼ö ÀÖ´Ù. ÀüüÀûÀ¸·Î 0.033ÃÊ°¡ °É·È°í SPOT1ÀÇ °æ°ú ½Ã°£ÀÌ 0.0002ÃÊ °É·È°í SPOT2ÀÇ °æ°ú ½Ã°£ÀÌ 0.032ÃÊ°¡ °É·È´Ù¸é ÇÔ¼ö2°¡ ½Ã°£À» ¸¹ÀÌ Àâ¾Æ ¸Ô°í ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ°Ô µÈ´Ù. Áï, ÀÌ ÇÔ¼ö°¡ ¼Óµµ ÀúÇÏÀÇ ÁÖ¹üÀ̸ç ÃÖÀûÈ ´ë»óÀÌ µÈ´Ù.
ÀÌ ¸ÅÅ©·Î´Â ÀçÈ°¿ëÀÌ ½±µµ·Ï ÀÛ¼ºÇÏ¿´À¸¹Ç·Î ¼Ò½º ¼±µÎ¿¡ ´ëÃæ º¹»çÇØ ³Ö°í ½Ã°£ ÃøÁ¤¿ëÀ¸·Î ¾Ö¿ëÇÒ¸¸ÇÏ´Ù. ÇÔ¼ö2°¡ ´À¸®´Ù´Â °ÍÀ» È®ÀÎÇßÀ¸¸é ´Ù½Ã ÇÔ¼ö2¿¡ ¸ÅÅ©·ÎµéÀ» Áß°£Áß°£ »ðÀÔÇØ ³Ö°í ÇÔ¼ö2ÀÇ ¾î¶² ºÎºÐÀÌ ´À¸°Áö¸¦ Á¤¹ÐÇÏ°Ô Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù. ÀÌ·± ½ÄÀ¸·Î ¹üÀ§¸¦ Á¼Çô ³ª°¡´Ù º¸¸é ÃÖÀûÈ ´ë»óÀ» ½±°Ô ãÀ» ¼ö ÀÖ´Ù.
´ÙÀ½Àº ¾ÆÁÖ Å« ÅؽºÆ® ÆÄÀÏÀ» ÁغñÇϵµ·Ï ÇÏÀÚ. Á÷Á¢ ÅؽºÆ® ÆÄÀÏÀ» ¸¸µé¾îµµ µÇ°í ¾Æ´Ï¸é CD-ROM¿¡ ÀÖ´Â oop-long.txt ÆÄÀÏÀ» ´ë½Å »ç¿ëÇصµ µÈ´Ù. ÀÌ ÆÄÀÏÀº °°Àº ³»¿ëÀ» ¿©·¯ ¹ø º¹»çÇÔÀ¸·Î½á ¹«·Á 5MBÀÇ Å©±â¸¦ °¡Áö°í ÀÖÀ¸¸ç ÃÑ ÁÙ ¼ö´Â 96000ÁÙ¿¡ ´ÞÇÑ´Ù. ÀÌ Á¤µµ ±æÀÌÀÇ ¹®¼¸¦ º° ¼Óµµ ÀúÇϾøÀÌ ÆíÁýÇÒ ¼ö ÀÖ´Ù¸é ÅؽºÆ® ÆíÁý±â·Î¼ ±âº» ±â´ÉÀº °®Ãß¾ú´Ù°í ÇÒ ¼ö ÀÖ´Ù.
ApiEdit´Â ¾ÆÁ÷ ÆÄÀÏÀ» ÀÔÃâ·ÂÇÏ´Â Äڵ带 °¡Áö°í ÀÖÁö ¾ÊÀ¸¹Ç·Î ÀÓ½ÃÀûÀ¸·Î ÀÌ ÆÄÀÏÀ» Àоî¿Ã ¼ö ÀÖ´Â ±â´ÉÀ» ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ. »ç¿ëÇÏÁö ¾Ê´Â Å°ÀÎ VK_F8¿¡ ÀÌ ÆÄÀÏÀ» ºÒ·¯¿Í ¹öÆÛ¿¡ ³Ö¾îÁÖ´Â Àӽà Äڵ带 ÀÛ¼ºÇÑ´Ù.
void OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
{
....
case VK_F8:
HANDLE hFile;
DWORD dwRead, dwSize;
TCHAR *TextBuf;
hFile=CreateFile("oop-long.txt",GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE) {
dwSize=GetFileSize(hFile,NULL);
TextBuf=(TCHAR *)malloc(dwSize+1);
ReadFile(hFile,TextBuf,dwSize,&dwRead,NULL);
TextBuf[dwRead]=0;
CloseHandle(hFile);
off=0;
PrevX=0;
bLineEnd=FALSE;
xMax=1024;
xPos=0;
yPos=0;
SelStart=SelEnd=0;
ClearBookmark();
lstrcpy(buf,"");
Insert(0,TextBuf);
free(TextBuf);
SetCaret();
Invalidate(-1);
}
return;
ÆÄÀÏÀ» ÀÐÀº ÈÄ Insert ÇÔ¼ö·Î ¹öÆÛ¿¡ »ðÀÔÇߴµ¥ »ðÀÔ ½ÃÁ¡¿¡¼ Á¤·Ä°ú ½ºÅ©·Ñ Á¤º¸ °»½ÅÀ» ÇÒ °ÍÀÌ´Ù. oop-long.txt´Â ÇÁ·ÎÁ§Æ® Æú´õ¿¡ ÀÖ´Â °ÍÀ¸·Î °¡Á¤ÇÏ°í ÀÖÀ¸¹Ç·Î º¹»ç¸¦ Çسõ´ø°¡ ¾Æ´Ï¸é ÀûÀýÇÑ Àý´ë°æ·Î¿¡ º¹»çÇسõ°í ÄÚµåÀÇ °æ·Î¸¦ °íÃÄ ÁÖµµ·Ï ÇÏÀÚ. ½ÇÇàÁß¿¡ F8À» ´©¸£¸é oop-long.txt ÆÄÀÏÀ» Àоî¿Ã °ÍÀÌ´Ù. ÄÄÆÄÀÏÇÑ ÈÄ ½ÇÇàÇغ¸°í ÀÌ Á¤µµ Å©±â¸é ¾î´À Á¤µµÀÇ ¼Óµµ°¡ ³ª´ÂÁö Å×½ºÆ®Çغ¸µµ·Ï ÇÏÀÚ.
F8À» ´·¶À» ¶§ ÆÄÀÏÀ» Àоî¿À´Â ¼Óµµ´Â ¾ÆÁÖ ºü¸£´Ù. ¿äÁò Çϵåµð½ºÅ© ¼º´ÉÀÌ ³Ê¹« ÁÁ¾Æ¼ 5MB Á¤µµ¸é 0.5Ãʸ¸¿¡ ´Ù ÀÐÀ» ¼ö ÀÖ´Â Á¤µµ´Ù. ±×·¯³ª Àоî¿Â Á÷ÈÄ¿¡ Á¤·ÄÀ» óÀ½ºÎÅÍ ³¡±îÁö ÇØ¾ß ÇϹǷΠȸ鿡 ÆÄÀÏ ³»¿ëÀÌ Ãâ·ÂµÇ´Â µ¥´Â ¾à°£ÀÇ ½Ã°£ÀÌ ÇÊ¿äÇÏ´Ù. 96000ÁÙÀ» ÁË´Ù ½ºÄµÇÏ¸é¼ ÁÙÀÇ Ã³À½°ú ³¡À» ã¾Æ³»¾ß ÇϹǷΠ´À¸° °Ô ´ç¿¬ÇÏ´Ù. ÀÚµ¿°³ÇàÀ» ÇÏÁö ¾Êµµ·Ï F9¸¦ ´·¯ ¿É¼ÇÀ» Á¶Á¤Çϸé Á¤·Ä ¼Óµµ´Â ±²ÀåÈ÷ »¡¶óÁø´Ù.
´ÙÀ½Àº ¾Æ·¡À§·Î À̵¿Çغ¸°í ½ºÅ©·Ñµµ Çغ¸°í ¸¶¿ì½º·Î ±Ü¾î¼ ¼±Åõµ Çغ¸ÀÚ. Å« ÆÄÀÏÀε¥µµ ´À¸®Áö ¾Ê°í ±²ÀåÈ÷ ºü¸£°Ô µ¿ÀÛÇÑ´Ù. ÇÏÁö¸¸ ¹®¼ óÀ½¿¡´Â ¼Óµµ°¡ Á¦´ë·Î ³ªÁö¸¸ µÚÂÊÀ¸·Î °¥ ¼ö·Ï ´À·ÁÁ® ¹®¼ ³¡ ºÎºÐ¿¡¼´Â »ç¶÷ÀÇ µ¿ÀÛÀ» Á¦´ë·Î µû¶ó¿ÀÁö ¸øÇÑ´Ù. ¿Ö³ÄÇϸé ÁÙ¹øÈ£¸¦ ã´Â ÇÔ¼ö°¡ ¼øÂ÷ °Ë»öÀ» Çϱ⠶§¹®¿¡ µÞºÎºÐÀ¸·Î °¥ ¼ö·Ï ºñ±³Çغ¸´Â Ƚ¼ö°¡ Áõ°¡Çϱ⠶§¹®ÀÌ´Ù.
À̹ø¿¡´Â ¹®ÀÚ¸¦ ÀÔ·ÂÇغ¸ÀÚ. ±ÛÀÚ Çϳª¸¦ ÀÔ·ÂÇϴµ¥ °ÅÀÇ 3ÃÊ °¡·® °É¸®¸ç ÇѱÛÀÇ °æ¿ì ÇÑ ±ÛÀÚ ÀÔ·ÂÇϴµ¥ 10ÃÊ Á¤µµ°¡ °É¸°´Ù. »ç¶÷¼ÕÀ» ¸ø µû¶ó¿Ã »Ó¸¸ ¾Æ´Ï¶ó ±â´Ù¸®±âµµ °©°©ÇÒ Á¤µµ·Î ´À·Á °ÅÀÇ ¸ø¾µ Áö°æÀÌ´Ù. ÀÔ·Â ¼Óµµ¿¡ À־ ¹º°¡ Ư´ÜÀÇ ´ëÃ¥À» ¸¶·ÃÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» °Í °°´Ù. ÃÖ¾ÇÀÇ °æ¿ì´Â À©µµ¿ìÀÇ Å©±â¸¦ º¯°æÇÒ ¶§Àε¥ À̶§´Â Á¤·ÄÀ» óÀ½ºÎÅÍ ³¡±îÁö ´Ù½Ã Çϱ⠶§¹®¿¡ ¾ÆÁÖ ½ÉÇÏ°Ô ´À·ÁÁø´Ù.
ÆíÁýÆÄÀÏÀÌ Ä¿Áö¸é ´À·ÁÁø´Ù´Â °ÍÀ» ´«À¸·Î Á÷Á¢ È®ÀÎÇØ ºÃÀ¸´Ï ¾î¶² ºÎºÐÀÌ ¿Ö ´À¸°Áö Á¶»çÇغ¸°í ¼Óµµ¸¦ °³¼±Çغ¸µµ·Ï ÇÏÀÚ. ÀÌ ÃÖÀûÈ°¡ ³¡³ª¸é 5MB Á¤µµÀÇ ÆÄÀϵµ ¹«¸®¾øÀÌ ´Ù·ê ¼ö ÀÖ´Â ÆíÁý±â°¡ µÇ¾î ÀÖÀ» °ÍÀÌ´Ù.