2013-03-05 1 views
3

Microsoft.Data.Schema.ScriptDom 및 Microsoft.Data.Schema.ScriptDom.Sql 라이브러리를 사용하여 SQL을 구문 분석하고 SQL SELECT 문에 "TOP #"을 추가합니다. 특정 상황에서 결과 집합을 제한하기 위해이 작업을 수행합니다.Microsoft.Data.Schema.ScriptDom 구문 분석기의 속도

방금 ​​라이브러리를 사용하기 시작했고 SQL을 구문 분석하는 것이 정확히 빠르지 않은 것으로 나타났습니다. 나는 실제로 속도를 측정하기위한 코드를 사용하지 않았지만 두 번째와 반 사이의 속도가 눈에 띈다. 어느 것이 끔찍한 것이 아니라 빨리 부르지 않을 것입니다.

내 코드는 다음과 같습니다 :이 봤 내가 뭔가를 잘못하고 있어요 그래서 만약 내가 궁금하네요 속도에 대한 불만을 찾을 수없는 한

var Parser = new TSql100Parser(true);  
    TextReader reader = new StringReader(sql); 
    IList<ParseError> errors; 
    var fragments = Parser.Parse(reader, out errors); 

.

+0

SQL을 생성하는 부분을 해결할 수있는 기회를 당신이 있습니까 ? 그렇지 않으면 어셈블리를 계측하는 것이 최선의 방법입니다. –

+0

그냥 명확하게; 위의 코드에서 마지막 줄은 눈에 띄게 느립니다. SQL을 다시 작성하는 코드 라 할지라도 모든 것이 잘 수행되는 것 같습니다. 오늘 내가 나중에보고있는 것을 더 잘 보여주는 코드를 나중에 게시 할 수 있는지 확인해 보겠습니다. –

+0

Stopwatch 클래스를 사용하여 필자는 테스트 SQL을 구문 분석하는 데 필요한 시간과 구문 분석 후 SQL을 다시 작성하는 데 필요한 시간을 캡처 할 수있었습니다. 제 계산이 정확하다면 파싱은 516.83ms 였고 SQL을 다시 작성하는 데는 1.93ms가 걸렸습니다. 테스트 환경은 Windows 7 64bit이므로 Stopwatch는 고해상도입니다. –

답변

3

Microsoft의 라이브러리는 사용자가 빠르게 호출하는 라이브러리가 아닙니다. 나는 좀 더 많은 구글 검색을했는데이 문제를 볼 수있는 유일한 사람은 아니다. SQL을 실제로 구문 분석해야하는 경우 몇 가지 대안이 있습니다. MS의 라이브러리 기능은 없지만 성능이 뛰어납니다.

Gold Parsing System

Poor Man's T-SQL Formatter

+0

구문 분석에서 기대하는 바를 모릅니다. 데이터베이스 코드의 병목 현상을 피하는 주요 방법 중 하나는 가능한 한 파싱을 피하는 것입니다. 구문 분석이 느리다고 받아 들여 사용을 최소화하면 삶이 편하게됩니다. –