Syncope.T-*
728x90

코드의 최적화는 크게 세가지 이유를 가져요.

 

첫째, 프로그램의 처리 속도 향상

둘째, 컴퓨터 자원 절약

셋째, 가독성 증대

 

일반적인 상황에서, 보다 빠르게 작업을 처리하면서 보다 적은 자원을 소모하는 것이 좋은 프로그램의 조건이에요.

 

물론 지극히 단순한 작업 같은 경우엔 최적화 유무에 의해 발생하는 차이에 대해서 사용자가 느끼기 힘들어요.

아니, 가끔은 너무 단순해서 그것을 더이상 최적화 할 수 없을 때도 있어요.

하지만 방대한 양의 일을 처리할 때에는 최적화가 아주 중요한 요소로 작용한답니다.

 

이번 글에서는 코드의 최적화를 통한 처리 속도의 향상 방법을 알아보기로해요.

 

백문이 불여일견. 예를 들어볼게요.

폼 위에 텍스트 박스가 하나 놓여있어요.

이 텍스트 박스에 "ABC"라는 문장을 출력하고 싶다면 어떻게 해야할까요?

 

아마 다들 다음과 같은 방법을 사용할거에요.

 

텍스트박스 = "ABC"

위와 같은 경우가 바로 '더이상 최적화하기 곤란한' 경우에요.

단지 한 줄의 코드로 표현되는 명확하기 그지 없는 상황이지요!

 

사실 C++ 같은 저급언어에서는 이와 같은 상황에서도 조금 더 빠듯하게 만들 수 있어요.

하지만 VB는 그런 여러 테크닉을 발휘하는 것에 제약이 있으니 무효.

 

아무튼 다음으로. 이번엔 텍스트 박스에 큰 크기의 문자열을 출력하고 싶어요.

텍스트 파일에서 문자열을 읽어오는 상황이라고 가정하면, 우선 아래와 같이 코드를 짤 수 있을 거에요.

 

Dim TT As String
Open App.Path & "\input.txt" For Input As #1
     Do Until EOF(1)
          Input #1, TT
          텍스트박스 = 텍스트박스 & TT
     Loop
Close #1

텍스트 파일의 크기가 수 KB 정도라면 위와 같은 코드만으로 충분해요.

하지만 1MB짜리 파일을 읽으려한다면?

 

텍스트 박스 컨트롤의 특징 상, 박스의 내용이 크면 클수록 덧붙이는 데에 시간이 오래 걸려요.

이것은 변수에도 적용되는 사항이지만 변수 쪽이 더 빠르지요!

그러면 아래와 같이 수정해보아요.

 

Dim TT As String, RT As String
Open App.Path & "\input.txt" For Input As #1
     Do Until EOF(1)
          Input #1, TT
          RT = RT & TT
     Loop
     텍스트박스 = RT
Close #1

고구마의 시험 결과, 1MB 정도 크기의 파일을 읽어들이는 데에 위 두 코드는 각각 228.31초, 56.87초가 걸렸어요.

약 4배의 차이가 난 것이지요! (이것은 대상 파일의 크기가 커질수록 분명하게 나타나요)

하지만 아직 부족해요.

 

위 두 코드에서 공통적으로 사용된 읽기 방식은 파일을 Input으로 열어 한 줄 한 줄 읽는 거에요.

한 줄짜리 파일이 아닌 이상, 결국 파일의 줄 수만큼 묵묵히 반복할 수 밖에 없는 것이지요.

이것이 시간이 오래 걸리는 주된 원인이에요. 자, 그렇다면 한 번에 읽어버리면 되는 것 아니겠어요?

 

Dim BT() As Byte
Open App.Path & "\input.txt" For Binary As #1
     ReDim BT(0 To LOF(1) - 1) As Byte
     Get 1, , BT
     텍스트박스 = StrConv(BT, vbUnicode)
Close #1

짜잔, Binary로 열어 Byte 배열에 파일 내용을 담고, 그것을 출력하는 방법이에요.

Byte 배열을 출력하기 위해서 StrConv 함수로 변환하였구요.

 

이 방법을 쓰면 1MB 정도의 파일이라도 약 0.3초 만에 읽어 표시할 수 있어요.

속도가 정말 많이 빨라졌지요? 하지만 조금 더 개선할 수 있는 부분이 있답니다.

 

Dim AT As String
Open App.Path & "\input.txt" For Binary As #1
     AT = Space(LOF(1))
     Get 1, , AT
     텍스트박스 = AT
Close #1

Byte 배열이 아닌 문자열 변수로 내용을 받는 거에요.

이렇게 코딩하면 Byte 배열을 이용했을 때보다 약 0.05초 정도 빨라져요.

아마 특별히 큰 용량의 데이터를 읽는 것이 아닌 이상에야 사용자가 이 차이를 느끼는 것은 힘들거에요.

 

자, 어떻게 코딩하느냐에 따라 프로그램의 처리 속도가 확연히 달라진다는 것을 아셨지요?

사실 최적화 방법은 대표적인 몇가지 정석을 제외하고는 자잘한 개인 노하우가 중요해요.

평소에도 여러가지 경우를 상정해서 각각을 실제 비교해보는 것이 좋은 습관이라고 할 수 있지요!

profile

Syncope.T-*

@Syncope

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...