2013-03-05 61 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); 

我GOOGLE了這一點,並沒有發現關於速度的任何投訴,所以我不知道如果我做錯了什麼。

+0

是否有任何機會,你可以修復產生SQL片?否則,組裝儀器是最好的選擇。 – 2013-03-05 16:27:35

+0

只是爲了澄清;上面的代碼中的最後一行顯着較慢。其他一切,甚至是重寫SQL的代碼,似乎都表現得很好。我會看看我是否可以在今天晚些時候發佈更多代碼,以更好地說明我所看到的內容。 – 2013-03-05 16:33:53

+0

使用Stopwatch類我能夠捕獲解析我的測試SQL所需的時間與解析後重寫SQL所需的時間。如果我的數學是正確的解析花了516.83毫秒和重寫SQL花了1.93毫秒。測試環境是Windows 7 64bit,因此Stopwatch具有高分辨率。 – 2013-03-06 20:38:26

回答

3

看來,微軟的圖書館並不是你要打的快。我已經做了一些更多的谷歌搜索,我不是唯一一個看到這個問題。如果你確實需要解析SQL,那麼有一些選擇。他們沒有微軟圖書館的功能,但他們似乎表現良好。

Gold Parsing System

Poor Man's T-SQL Formatter

+0

我不知道你想要解析什麼,避免數據庫代碼瓶頸的關鍵方法之一是儘可能避免分析。如果你只是接受解析緩慢並儘量減少對它的使用,那麼你會讓你的生活更輕鬆。 – 2016-08-06 16:41:27