>

큰 맞춤 목록을 검색하는 가장 좋은 방법은 무엇입니까? 예를 들어 다음과 같은 목록이 있습니다 ...

Dim BigList As New List(Of Button)
For i As Integer = 0 To 99999
    Dim Btn As New Button With {.Text = "Button Number: " & i}
    BigList.Add(Btn)
Next

이제 BigList에서 특정 버튼을 찾을 수 있도록하려면 ...

Dim BtnX As Button
BtnX = BigList.Find(Function(p) p.Text = "Button Number: 25784")

내 버튼 목록에 99,999 개의 버튼이 포함되어 있기 때문에 성능에 어떤 영향을 줍니까? 검색하기 전에 버튼의 .Text 속성을 정확히 알고 있다면 내 목록을 검색하는 더 좋고 빠른 방법은 무엇입니까?


  • 답변 # 1

    먼저9999 개의 버튼 목록을 사용하는 것은 좋지 않습니다-애플리케이션의 전체 세션에 대한 제어가 제한되어 있습니다.
    모든 통제는 GDI Object 입니다 , 전달하면 애플리케이션 아키텍처에 문제가 있으며 controls 를 사용하는 대신 예외가 발생합니다.
     가능하면 리소스를 절약하기 위해 System.Drawing.Graphics 클래스를 사용하십시오.

    MSDN의

    (GDI 개체) ) :

    와이즈 비즈

    두 번째, 질문에

    There is a theoretical limit of 65,536 GDI handles per session. However, the maximum number of GDI handles that can be opened per session is usually lower, since it is affected by available memory.

    를 사용할 수 있습니다  LINQ 확장 방법 :

    FirstOrDefault()
    
    

    또한 Dim btn As Button = BigList.FirstOrDefault(Function(p) p.Text = "Button Number: 25784") 를 사용한다면  또는 HashSet<T>  당신은 Array 에 비해 더 나은 성능을 가질 것입니다

    또 다른 접근법은 SortedDictionary - List<T> 를 사용하고 있습니다. 그런 다음 이진 검색을 사용하여 사전의 키 (int16)를 사용하여 버튼을 찾으면 이진 검색이 LINQ보다 빠릅니다.

    SortedDictionary (Of Int16, Button)

  • 이전 텍스트 파일에서 열 데이터를 가져 오기 위해 파이썬 스크립트를 만드는 방법은 무엇입니까?
  • 다음 c# - 빌드 이벤트에 사용될 사용자 정의 매크로 정의