2009-05-19 4 views
4

우리는 약 80 개의 고유 콤보 상자가 15 개 이상의 Windows에 분산되어있는 VB.Net 응용 프로그램이 있습니다. 현재 Window가로드되면 ComboBox는 SQL 데이터베이스에서 내용을 직접 검색합니다.Combobox 드롭 다운 캐싱

이 거의 변화하지 않는 선택 상자의 내용으로 매우 비효율적이다, 그래서 프로그램이 처음 실행되면 의미가 한 번에 모든 콤보 드롭 다운 값을 검색 할 수 있도록한다.

나는이 점에서 모범 사례의 웹 작업 예제를 찾을하기 위해 노력했습니다. 따라서 바퀴를 다시 발명하는 것을 피하기 위해, 저에게 올바른 방향으로 나를 안내 할 수있는 지혜 나 코드 스 니펫이있는 사람이 있습니까?

답변

2

캐싱은 확실히, 이동 같은 해시 테이블이나 뭔가를 사용하는 방법입니다. 모든 쿼리를 하나의 SQL 요청으로 병합하여 여러 테이블을 반환하고 모든 호출을 하나의 호출로 가져올 수 있다면.

1

는 시작에로드하고 콤보 상자에 입력 XML 파일에 데이터를 직렬화 수 없습니다. 그런 다음 단일 값, 데이터베이스를 마지막으로 업데이트 한 날짜 및 현재 날짜 이후 인 경우 데이터베이스에 테이블을 추가 할 수 있습니다. 데이터베이스 쿼리를 실행하여 콤보 상자를 채우고 xml 파일을 업데이트하십시오.

1

이것은 개발중인 애플리케이션에서 reqd와 매우 비슷합니다. 콤보 상자 당 정적 DataTables 정적 클래스를 만들었습니다. 앱이로드되면 모든 정적 데이터 테이블이 채워집니다.

샘플 :

static public class GlobalDropdownData 
    { 
     static private DateTime Combo1Table; 

     static private DataTable Combo1Table; 

     static private DataTable Combo1Table; 
} 

Vb.net 뭔가 같은 것 :

Public Class GlobalDropDownData 
    Shared Combo1DT As DataTable 
    Shared Combo2DT As DataTable 
    Shared Combo3DT As DataTable 
End Class 
0

예, 여러 결과 집합을 반환하는 하나의 호출로, 응용 프로그램 시작시 모든 조회 데이터를로드 할 수 있습니다. 상속받은 Winforms 앱은 그랬지만, 캐시 된 결과 집합을 모두 반환하기 위해 데이터베이스에서 조회 데이터를 가져 오는 웹 서비스 호출이 시작될 때까지 몇 초가 걸렸기 때문에 시작 시간이 대단히 느렸다. 실행. 이 문제가 발생하면 데이터베이스/웹 서비스 호출을 비동기 적으로 시작하여 데이터베이스 코드가 실행될 때 더 많은 초기화 작업이 발생할 수 있습니다. 캐시 된 데이터가 필요한 하나 이상의 콤보 상자가있는 화면을 표시하기 위해 단추를 클릭하는 등 사용자가 특정 작업을 수행하기 전에 데이터가 반환되었는지 확인해야하는 경우 하나 이상의 Winforms 타이머를 사용하면 도움이됩니다.

성능을 지원하는 추가 옵션은 별도의 스레드에서 데이터 액세스 호출을 수행 할 수 있습니다. 작업중인 프로젝트에서 시작 시간을 약 10 초에서 3 초 미만으로 줄이기에 충분한 다른 옵션을 찾았습니다 멀티 스레딩의 복잡성을 처리 할 필요가 없습니다.