문제

나는 주어진 텍스트의 특정 부분에 대한 키를 얻는 방법을 구축하려고 합니다. .resx 런타임 시 파일.

현재 파일을 열고 읽을 수 있습니다. ResXResourceReader) 하지만 나는 foreach 전체 파일을 검토합니다.

이는 성능 문제일 수 있습니다. .resx 파일은 상당히 크며(문자열 2000개 정도) 이 작업을 자주 수행할 수 있습니다.

나는 이것을 쿼리하기 위해 LINQ to Objects를 사용하고 싶습니다. where 방법은 상대적으로 최적화되어 있지만 그렇게 할 수 없었습니다.그만큼 ResXResourceReader 클래스에는 두 가지 메소드가 있습니다 AsQueryable() 그리고 GetEnumerator(), 하지만 그 결과에 대해 LINQ를 허용하지 않습니다(그래서 from n in reader.AsQueryable() where 실패).

에서 제공한 항목에 대해 LINQ를 수행하려면 어떻게 해야 합니까? ResXResourceReader, 아니면 시간을 들일 가치가 있나요?

도움이 되었습니까?

해결책

다음 코드는 LINQ를 사용하여 리소스 파일의 내용을 쿼리 할 수있는 ienumerable 객체를 반환합니다.

ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();

다른 팁

일부 전처리 작업을 고려해 보셨나요?

Resx 파일을 로드한 다음 키-값 쌍을 반복하여 저장할 수 있습니다. 반전 해시 테이블에서(예:해시 테이블의 키는 실제로 리소스의 값이고, 해시 테이블의 값은 리소스의 키입니다.그러면 value->key의 번역이 빨라질 것입니다.유일한 관심사는 중복(동일한 값을 가진 여러 리소스)을 처리하는 방법입니다.

이것은 실제로 당신의 시간의 가치가 없습니다. LINQ에는 .RESX 파일을 가능한 것보다 더 효율적으로 검색 할 수있는 수단이 없습니다. 메모리 사용법과 데이터 캐싱이 귀하에게 적합한 지 여부에 따라 전체 파일을 Dictionary<TKey,TValue> 그리고 당신의 조회를 그런 식으로 수행합니다.

물론, 나만의 Tuplet 객체를 만들어 키/값 쌍을 저장하고 전체 파일을 이들 목록으로 읽은 다음 LINQ에서 쿼리를 수행하도록 허용 할 수 있지만 이것은 빠르지는 않습니다. Dictionary 더 많은 오버 헤드가 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top