C# Microsoft.Data.Schema.ScriptDom解析器的速度

C# Microsoft.Data.Schema.ScriptDom解析器的速度,c#,tsql,sql-parser,C#,Tsql,Sql Parser,我正在使用Microsoft.Data.Schema.ScriptDom和Microsoft.Data.Schema.ScriptDom.Sql库解析Sql并将TOP添加到Sql select语句。我们这样做是为了在某些情况下限制结果集 我刚刚开始使用这个库,我注意到解析SQL并不是很快。我还没有对代码进行检测以实际测量速度,但它很明显,在半秒到整秒之间。这并不可怕,但我也不会说它快 我的代码如下所示: var Parser = new TSql100Parser(true);

我正在使用Microsoft.Data.Schema.ScriptDom和Microsoft.Data.Schema.ScriptDom.Sql库解析Sql并将TOP添加到Sql select语句。我们这样做是为了在某些情况下限制结果集

我刚刚开始使用这个库,我注意到解析SQL并不是很快。我还没有对代码进行检测以实际测量速度,但它很明显,在半秒到整秒之间。这并不可怕,但我也不会说它快

我的代码如下所示:

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

我在谷歌上搜索了一下,没有发现任何关于速度的抱怨,所以我想知道我是否做错了什么。

看来微软的库并不是你所说的快速。我做了更多的谷歌搜索,我不是唯一一个看到这个问题的人。如果您真的需要解析SQL,有一些替代方法。它们没有微软图书馆的功能,但它们似乎表现得很好


您是否有可能修复生成sql的部分?否则,检测程序集是最好的选择;上面代码中的最后一行速度明显较慢。其他一切,甚至是重写SQL的代码,似乎都表现得很好。我将看看今天晚些时候是否可以发布更多代码,更好地说明我所看到的。使用Stopwatch类,我能够捕获解析测试SQL所需的时间与解析后重写SQL所需的时间。如果我的数学是正确的,解析需要516.83毫秒,重写SQL需要1.93毫秒。测试环境为64位Windows 7,因此秒表分辨率较高。解析成本较高。将一些文本粘贴到字符串中不是一个好方法。这些都是生活中的事实,我不知道你对解析有什么期待,避免数据库代码瓶颈的关键方法之一就是尽可能避免解析。如果你只是接受解析速度慢的事实,并尽量减少对它的使用,你的生活就会变得更轻松。