2013-06-09 1 views
0

필자는 3 열로 오름차순으로 정렬하는 DataTable이 있습니다. 까다로운 부분은 열에 숫자 값과 숫자가 아닌 값이 포함될 수 있다는 것입니다. 그렇기 때문에 우리는이 필드를 캐스팅 할 수 있는지 확인합니다. 그렇다면 숫자 비교를 수행하고 그렇지 않으면 문자열 비교를 수행합니다.Visual Studio 2012 사용자 지정 CompareTo 메서드가 느려질 때 디버깅

이것은 컴파일 된 버전에서 매우 잘 작동하지만 Visual Studio 2012에서는 극히 느리게 진행됩니다 ... 디버깅 모드에서 5 분 이상 걸리는 방식과 컴파일 된 모드에서 1 초 미만의 시간이 소요됩니다.

모든 중단 점을 삭제했지만 코드의이 부분 만 디버깅 모드에서 느리게 진행됩니다.

비교 코드 :

Public Function CompareValues(ByVal sThis As String, ByVal sOther As String) As Integer 
    Dim bFirstNumeric As Boolean = IsNumeric(sThis) 
    Dim bOtherNumeric As Boolean = IsNumeric(sOther) 

    If bFirstNumeric AndAlso bOtherNumeric Then 
     Return Integer.Parse(sThis).CompareTo(Integer.Parse(sOther)) 
    ElseIf bFirstNumeric And Not bOtherNumeric Then 
     Return -1 
    ElseIf Not bFirstNumeric And bOtherNumeric Then 
     Return 1 
    Else 
     Return sThis.CompareTo(sOther) 
    End If 
End Function 
+0

예 알아요,하지만 정수라고 확신합니다. 이 시스템은 문자열로만 빌드되었지만 몇 년 후이 기능을 추가해야했습니다. Show Integer.TryParse가 더 빠르면 IsNumeric이됩니까? –

답변

0

여기에서, 다음과 같이 확인하고 진행 ISNUMERIC을 할 것입니다. 그것은 더 깨끗합니다.

Dim Value1 As Object 
Dim Value2 As Object 
Dim V1 As Integer 
Dim V2 As Integer 

Public Function IsNumeric(ByVal Expression As Object) As Boolean 

If IsNumeric(Value1) = True And IsNumeric(Value2) = True Then 

    V1 = Integer.Parse(Value1) 
    V2 = Integer.Parse(Value2) 

End If 

Return True 

End Function 

도움이 더 필요하면 알려주세요.

+0

나는 이것이 왜 더 청결한 지 왜 실제로 얻지 않는다. BubbleSort 시스템에 -1,0,1 값을 사용하고 있습니다. 하지만이 내 주요 문제가 해결되지 않습니다 :이 BubbleSort 느린 디버깅. IComparable을 사용하는 ArrayList에서 Sort를 수행하면 동일한 함수를 사용하고 내 정렬은 디버거 모드가 매우 느리고 디버거없이 매우 빠르게 컴파일됩니다. –