2011-11-03 3 views
0

이것은 모든 프로그래밍 언어의 기본 질문이지만 VBA에 익숙합니다. 그럼 VBA 코드를 사용하고 있습니다. 기억을 해제하는 데 의심의 여지가 있습니다. 할당 된 내용을 지우거나 교환 할 때 성능이 떨어지나요? 뭔가 메모리를 dellocating하면 성능이 저하됩니까?

같은 방법 나는 우리가 할당 된 메모리의 할당을 해제

sub my_function() 
    Dim a() as string 
    redim a(1 to 15) 
    'some for loop goes here aroung 50 iterations 
    erase a ' Deallocate the array 
    ' some piece of code goes here may be 40 lines 
end sub 

방법 우리가 어떤 메모리를 할당 해제 해달라고 II

sub my_function() 
    Dim a() as string 
    redim a(1 to 15) 
    'some for loop goes here aroung 50 iterations 
    'some piece of code goes here may be 40 lines 
end sub 

방법 우리가 메모리를 dellocate III 마지막 문장

sub my_function() 
    Dim a() as string 
    redim a(1 to 15) 
    'some for loop goes here aroung 50 iterations 
    'some piece of code goes here may be 40 lines 
    erase a 'deallocate the memory 
end sub 

이 방법 나는 삭제되는 문제는, 그것은 어떤 거대한 사이클을 먹고 있습니까? 또는 RAM의 더 많은 바이트? 또는 내가 서브 루틴의 끝을 기다리는 아니면 방법이 서브 루틴에는 삭제 문이 없습니다 II, 기능에 하위 루틴하지만 끝의 배열을 죽이고

문장을 삭제하여 가야 함수의 끝까지 배열이 필요 없으므로 충분히 빠르거나 최적화되어 있습니까? 다소 것이다

에있어서, 상기 제 1 시계 III, 사람들은 그 자체가 끝에 사망으로 서브 루틴의 끝에서 dellocate하는 어리석은 일이 말,하지만 감사에게 대답을

+0

"더 많은 라인 = 나쁨"-이 태도의 출처를 모르겠습니다. 문자열 변수에 길이가 있는지 검사하는 방법으로 문자열 변수 길이를 검사하는 것이 비교보다 빠르기 때문에 모범 사례입니다. – JimmyPena

답변

3

알고 열망 사용 된 언어와 사용되는 메모리의 크기에 따라 다릅니다. VBA의 경우 99.99 %의 모든 경우에서 배열 메모리를 할당 해제하면 성능이 향상되지 않는다고 생각할 수 있습니다. VBA에서는 개체를 명시 적으로 삭제해야하는 경우가 드뭅니다.

메모리 할당을 자동으로 처리하지 않는 C/C++ 같은 언어의 경우 코드에 메모리 누수가 없도록 메모리 할당을 명시 적으로 프로그래밍하는 것이 중요합니다.

+0

그가 말한 것. 내 이해는 (대부분의 경우) 변수가 범위를 벗어날 때 VBA가 메모리를 자동으로 할당 해제한다는 것입니다. – JimmyPena

+0

질문은 1000 줄의 코드에서 처음 10 줄 뒤에 사용하지 않을 때 함수의 끝까지 변수를 살아야만하는 이유입니다. – niko

+0

메모리 사용을 최소화하려는 유일한 이유는 VBA가 운영 체제가 느린 페이징을 많이하게하는 많은 메모리. 현재 PC에서는 이런 일이 발생하지 않을 것입니다. 배열 지우기는 VBA에서 지우는 것보다 훨씬 느립니다 (지우는 데 걸리는 시간이 추가로 1 밀리 초일 것 같지는 않지만) –

관련 문제