2011-04-27 5 views
8

이전 Visual Basic에서 프로그래머는 문자열을 특정 너비로 ​​선언 할 수있었습니다. 예를 들어, 사회 보장 번호 (미국 내)는 항상 11 자임을 알고 있습니다. 그래서,이 같은 열한 문자 문자열로 사회 보장 번호를 저장 할 문자열을 선언 할 수VB6 - VB6에서 고정 너비 문자열을 사용하면 성능상의 이점이 있습니까?

Dim SSN As String * 11 

내 질문은 :이 빠른 코드 실행을 만들 것 중 성능 이점의 모든 유형을 만들 않습니다 또는 적은 메모리를 사용합니까? 또한 고정 길이 문자열을 메모리에 다르게 할당 할 수 있습니까 ( : 스택에서 힙과 반대로)?

+1

성능 최적화가 아닌 데이터 유효성 검사에이 기능을 사용하십시오. – JohnFx

+2

나는 벤치마킹을하기로 결정했다. 내 코드에서 고정 너비 문자열을 사용하면 실제로 성능이 15 % ** 저하됨을 발견했습니다. 즉, 평균 실행 시간이 15 % 더 길었습니다. 변수가 스택이나 힙에 할당되어 있는지 확인하는 방법을 찾을 수 없으며 VB6에서 방법을 알지 못합니다. 지금까지 데이터 유효성 검사와 마찬가지로 유효성을 검사하는 것은 좋지 않은 방법입니다. 아마이 기능이 VB.NET에서 제거 된 이유를 이해할 수 있습니다. –

+0

큰 질문입니다. 좋은 논평, 다니엘! – CaBieberach

답변

4

VB6 또는 유일한 시간 (예 : 당신이 SSN의 준 예로서) 도메인 제약으로 모델링 할 때 일부 COM의 API의 상호 작용, 또는 때

고정 길이 문자열은 일반적으로 볼 수 있었다 고정 길이 문자열은 API 호출로 작업했습니다. 고정 길이 문자열을 전달하지 않으면 길이가 예상보다 길 때 예상치 못한 오류가 발생하고 때로는 예상보다 짧아지는 경우도 있습니다.

응용 프로그램에서 변경하려고 계획하고있는 경우 API 또는 외부 DLL에 문자열이 전달되지 않고 프로그램에서 고정 길이 필드를 출력 할 필요가 없는지 확인하십시오 많은 AS/400 가져 오기 프로그램

필자는 300k + 레코드의 루프를 실행하면서 개인적으로 성능 차이를 보지 못했지만, 필자가했을 때 고정 된 길이로 제공하고 작업 할 수밖에 없었습니다. VB는 기본적으로 정의되지 않은 길이를 사용하기를 좋아하므로 고정 길이의 경우 성능이 저하 될 것이라고 생각합니다.

두 문자열의 기본 연결을 수행하는 테스트 응용 프로그램을 작성하고 50k 시간과 같이 함수를 반복하도록하십시오. 길이가 미정의 길이와 고정 길이의 차이를 시간차로 측정합니다.

+0

고정 길이 문자열을 사용하는 또 다른 이유는 고정 길이 레코드를 읽고 파일에 쓸 때입니다. 예 : Types의 배열. –

5

업데이트 :

아니, 성능 이점이 없다; 그러나 성능상의 이점이 있더라도 루프에서 많은 시간 (수백만 회)을 호출하지 않는 한 마이크로 최적화입니다.

또한 고정 길이 문자열은 일반적으로 가변 길이 문자열보다 많은 메모리를 차지합니다. 매우 짧은 고정 길이 문자열을 제외하고는 전체 길이를 사용하지 않습니다.

항상 그렇듯이 코드를 유지 관리하기 전에 신중하게 벤치 마크해야합니다. 내가 사용했다는 것을 이전

관련 문제