2012-11-16 3 views
0

는 다음과 같은 문장이 메모리 누수가 발생할 것인가 Object를 들어 갈까요?는 VB.NET은

+0

가 왜'getConnection' 필요합니까? 왜'TestConnection' 안에 새로운 인스턴스를 만들지 않습니까? – igrimpe

+0

@Tim Schmelter, 내가 명확하게하기 위해 Imports 문을 추가했습니다. – w0051977

+0

@igrimpe에서 함수가 Oracle 연결을 리턴 할 수 있으므로 getConnection() 함수가 필요합니다. 질문을 설명하기 위해 위의 간단한 코드를 추가했습니다. – w0051977

답변

1

메서드를 호출 한 후에 가비지 수집되므로 메모리 누수가 발생하지 않습니다.

그러나이 방법은 혼동을 일으키지 않습니다. 예외 처리가 끝나자 마자 (암시 적으로 닫는) 연결은 항상 처분해야합니다 (예외가 발생한 경우에도).

마지막으로 Try/Finally 또는 Using 문을 사용하여 (쉽게) 수행 할 수 있습니다. 하지만 두 방법 모두 연결을 래핑해야하므로 호출하는 메서드에서 메서드를 사용하여이 메서드를 잊어 버릴 수 있습니다. 그러므로 나쁜 습관입니다.

그래서 간단하게이 작업을 수행 :

Public Sub TestConnection() 
    Using con = New SqlConnection("connection string here") 
     Using cmd = new SqlCommand("sql query here", con) 
      ' do something, f.e. cmd.ExecuteNonQuery() ' 
     End Using 
    End Using 
End Sub 
+0

감사합니다. TestConnection은 명시된대로 구성됩니다. 아마 나는 그것을 포함해야했다 (나는 그것이 질문과 관련 있다고 생각하지 않았다). 어떤 방법을 "혼란을 일으키는 것 외에는 아무것도하지 않습니다"라고 설명해 주시겠습니까? – w0051977

+0

@ w0051977 : 당신의'getConnection'은 아무것도 추가하지 않았기 때문에. –

2

참조 유형을 반환하므로 TestConnection의 동일한 인스턴스에서 작업하므로 여기서 메모리 누출이 발생하지 않습니다. 결국 null이 2 인 경우 (gc가 수집하지만) 연결이 닫힙니다.

+0

참조 유형을 반환하겠습니까? 'New'키워드가 사용됩니다. – w0051977

+0

물론! 그것은 수업입니다. 새 키워드로 클래스를 인스턴스화합니다. – graumanoz

+0

감사합니다. 객체는 힙에 있습니다. 그것이 내가 혼란스러워했던 것입니다. – w0051977

관련 문제