SQL Server와 함께 사용하면 dapper.net 캐시를 주기적으로 비우는 방법

c# dapper orm sql-server-2005 tsql

문제

누군가 이것이 Dapper.net 웹 사이트에서 무엇을 의미하는지 설명해주십시오.

제한 사항 및주의 사항

Dapper는 실행되는 모든 쿼리에 대한 정보를 캐시하므로 개체를 신속하게 구체화하고 매개 변수를 빠르게 처리 할 수 ​​있습니다. 현재의 구현은,이 정보를 ConcurrentDictionary 오브젝트에 캐쉬합니다. 저장하는 객체는 절대 플러시되지 않습니다. 매개 변수를 사용하지 않고 즉시 SQL 문자열을 생성하는 경우 메모리 문제가 발생할 수 있습니다. 사전을 LRU 캐시로 변환 할 수 있습니다.

나는 굵게 표시된 줄이 무엇인지 이해할 수 없다. SQL Server와 C # 클라이언트를 사용하고 있습니다.

누군가가이 메모리 문제를 일으킬 C # 코드 샘플을 제공 할 수 있습니까? 고맙습니다

수락 된 답변

매개 변수를 사용하지 않고 즉시 SQL 문자열을 생성하는 경우 메모리 문제가 발생할 수 있습니다.

당신은 이것을 할 수 있습니다 :

string s = "SELECT email, passwd, login_id, full_name " + 
           "FROM members WHERE " +
           "email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);

또는 다음 작업을 수행 할 수 있습니다.

string s = "SELECT email, passwd, login_id, full_name " + 
           "FROM members WHERE " +
           "email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);

후자는 매개 변수화되어 있습니다. 한 번 캐시됩니다. 전자는 매개 변수화되지 않았습니다. email 대해 다른 값을 가진 쿼리를 작성할 때마다 캐싱됩니다. 이것은 당신의 기억을 폭발시킬 것입니다.

후자는 매우 우수합니다. 그것은 주입 공격을 피합니다. dapper는 한 번 캐시 할 수 있습니다. SQL Server는 실행 계획을 한 번 컴파일하고 캐시합니다.

이미 매개 변수가있는 쿼리를 사용해야합니다. 그렇지 않다면, 당신이하고있는 모든 것을 버리고 이것을 우선 순위로 삼으십시오.

누군가가이 메모리 문제를 일으킬 C # 코드 샘플을 제공 할 수 있습니까? 고맙습니다

전자를 반복하십시오. 당신의 기억이 성장하는 것을 지켜보십시오. 후자를 반복하십시오. 당신의 기억이 성장하지 않도록 조심하십시오.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.