我正在使用 gudusoft (sqlparser.com) 提供的 sqlparser(c#),不确定之前是否有人使用过。
sqlparser 提供了一个解析器对象,您可以在其中输入一个 sql 字符串。然后通过调用 parse() 方法,您可以获得所有标记、标签等。解析器构建得很好。
这是我使用它的方式,非常简单:
line 1: TGSqlParser parser = new TGSqlParser(TDbVendor.DbVMssql); // init the parser object
line 2: parser.SqlText.Text = code; // set input sql code, for e.g. "SELECT * FROM table_sales"
line 3: int parser_ret = parser.Parse(); // call parse method
line 4: string output = parser.XmlText; // retrieve the xml generated by line 3. The xmlText could be 500,000-character long.
第 1-3 行的工作效率非常高(在不到一秒的时间内完成)。但是,第 4 行非常慢(可能需要一分钟或更长时间)。令人困惑的是,通过使用调试器,我发现 parser.XmlText 已经生成并准备好在第 3 行访问。第 4 行仅用于访问该值。
为什么访问一个值比实际生成它要慢得多?
我是 c# 的新手,不确定是这个特定解析器的问题还是 c# 的一般问题。
谢谢!