2009-03-10 3 views
0

내 응용 프로그램에 경로 토큰을 정규화 된 경로로 변환하는 클래스가 있습니다. 예를 들어 "%MYAPPDATA%"과 같은 문자열을 사용하고 C:\Users\user.DOMAIN\AppData\Raoming\MyApp을 반환 할 수 있습니다.이 응용 프로그램 데이터를 유지해야합니까?

또는 클래스에는 문자열 대신 enum을 사용할 수있는 함수에 대한 오버로드가 있습니다. 예 : 열거 형 AppPaths.MyAppData을 가져오고 C:\Users\user.DOMAIN\AppData\Raoming\MyApp을 반환 할 수 있습니다.

"lookup table"을 어딘가에 저장해야하지만, 가장 좋은 방법이나 구조가 무엇인지 잘 모르겠습니다. 데이터 세트를 사용하고 디스크에 테이블을 써야합니까? 아니면 그냥 기억에 남기고 있니?

단일 경로 값은 문자열과 열거 형에 매핑 할 수 있습니다. 문자열을 전달할 때 인덱스가 열거 형의 정수 값에 매핑되고 배열을 통해 검색을 수행하는 배열을 메모리에 유지할 수 있다고 가정합니다.

생각하십니까?

답변

2

특히 큰 경우가 아니면 메모리의 배열을 사용합니다. 좀 더 많은 기능과 약간의 오버 헤드가 필요하면 목록이나 사전을 사용할 수 있습니다. 오버 헤드가 많지만 많은 기능을 사용하려면 메모리 내 데이터 집합을 사용할 수 있습니다.

다시 말하면, 250-500 개 이상의 항목이 없으면 프로그램 작동 중에 디스크 저장소를 사용하는 것이 바람직하지 않습니다. 대기 시간 (검색 시간)과 코딩의 오버 헤드는 그럴 가치가 없어.

물론 장기 저장 (예 : 프로그램 시작시로드 됨)으로 디스크에 레코드를 보관할 수도 있습니다. 그러나 OS에서 데이터를 가져 오는 경우에도이 기능이 필요하지 않을 수도 있습니다.

+0

단지 생각 ... - 그래서 당신은 아마 모든 사용자가 자신의 AppData가 어디 있는지 알고 있기 때문에 "조회 테이블"을 제거 할 수

if(Directory.Exists(User.Current.AppDataPath)) 

? –

+0

예 - 그것이 내가 취할 접근법입니다. 일치하는 코드를 작성하지 않으려면 List 유형을 검사하거나보다 일반적인 사전 버전을 조사하십시오. 당신은 여전히 ​​비교를 할 수있는 기능이 필요 하겠지만 꽤 쉽습니다. –

+0

한 가지 더 질문 - 번역기는 일종의 유틸리티이므로 대용량 문이있는 정적 클래스로 작성했습니다. 이제 룩업 테이블을 메모리에 유지해야하므로 테이블을 공유 상태로 만들거나 클래스를 정적이 아닌 클래스로 만들어야합니까? –

1

모두 성능에 따라 다릅니다.

데이터베이스 테이블에 데이터를 저장할 수 있습니다 (원시 데이터의 경우 하나, 키와 열거 형의 관계의 경우 두 개). 간단한 SQL 쿼리로 데이터를 검색 할 수 있습니다. 하지만 기본 데이터베이스와 캐싱 메커니즘에 따라 가장 빠를 수는 없습니다.

런타임시 조회를 빠르게하기 위해 두 개의 메모리 내장 맵 (사전?)을 사용하여 시작할 때 초기화 할 수도 있습니다.

0

큰 크기로 성장할 수 없다면 메모리에 보관할 것입니다. 그렇지 않으면 나중의 사용을 위해 데이터베이스/파일에 저장합니다.

물론 사용법에 따라 다릅니다. 멀리 당신이 사용자 특정 데이터 경로를 저장하려면 참조하십시오. 데이터 경로를 저장할 수있는 사용자 클래스가있을 수 있습니까? 객체가 다음 구성 할 때 난 그냥 배열을 구축해야

관련 문제