내 응용 프로그램 일부 텍스트가 해석 처리 및 데이터베이스 호출을 줄이기 위해 고유 명사 캐시를 사용C# 사전 키 조회는
Dictionary<String, ProperNoun> ProperNounsDict;
if (!ProperNounsDict.ContainsKey(word))
{
var newProper = new ProperNoun() { Word = word };
ProperNounsDict.Add(word, newProper);
UnitOfWork.ProperNounRepository.Insert(newProper);
try
{
UnitOfWork.SaveChangesEx();
}
catch (Exception ex)
{
//
}
}
문제는 다른 방법으로 문자열의 데이터베이스와 C#을 치료 평등입니다 2014
1) 데이터베이스 (SQL 서버)
Column_name Type Collation
Word nvarchar Latin1_General_100_CS_AS
,369 : 그래서 유사한 단어에 대한 중복 키 오류 (SQL)로 실행할 수 있습니다
Saevarsson
및 Sævarsson
데이터베이스 관점에서 같은 일을하고는 æ는 구문 분석 된 텍스트에서 매우 드문 단어가 문자를 포함하기 때문에, 나를 위해 괜찮 :
select * from dict.ProperNoun where Word = N'Saevarsson' -- returns both Saevarsson and Sævarsson
2) C#
string s1 = "Sævarsson";
string s2 = "Saevarsson";
bool equals = s1.Equals(s2, StringComparison.InvariantCulture);
InvariantCulture 방식으로 비교하면 s1과 s2가 같은 것으로 간주됩니다.
질문 : chec 할 방법이 있습니까? k는 InvariantCulture 방식으로 문자열 키가 존재할 때 사용합니까? 가능한 경우 키 존재 확인을위한 O (1) 복잡성을 풀고 싶지 않습니다.
상황은 내가 시도 :
이가) 데이터베이스 검사 - 캐시 미스를 들어, 캐시에 삽입하기 전에, 또한 DB에 확인. 쿼리를 많이 생성하므로 성능이 끔찍
B) 문자열 정상화-this one 유사한지도를 사용하여 "정상"사람과 원치 않는 문자를 대체합니다. 많은 작업이 필요하며 StringComparison.InvariantCulture
은이를 처리하는 방법을 알고 있기 때문에 자동화가 가능하다고 생각합니다.
감사합니다.
당신은 새 사전을 생성하고 전달할 수'StringComparer.InvariantCulture'이 생성자에 ... 그것은 될 것입니다 O (1) –