2

我使用 POCO JSON 编写了一个简单的分层 json 解析器,用作 sax 解析器。如果我使用字符串或流作为解析方法的输入,它们的结果是否有任何差异,请参见下面的调用,或者不同的构造函数是否等效?

Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);

在内存消耗,速度等方面?

4

1 回答 1

5

std::string 版本只是代表您创建流的包装器,因此最终总数将大致相同,字符串对用户来说更方便。

[编辑]

1.5.2 对此进行了更改-删除了包装,因此现在(流和字符串)版本都可以迭代。基准示例可用于确定流比字符串慢多少。

[/编辑]

请注意,1.5.2 中有一些重大更改- DefaultHandler 名称已删除,内部处理程序已转换为自动创建的智能指针(这是我们必须废弃 DefaultHandler 以便现有代码不会传递堆栈创建的处理程序的主要原因对于智能指针,这不是一个好的设计)。因此,在 1.5.2 中,默认解析不再需要显式创建处理程序:

std::string json = "{ \"test\" : null }";
Parser parser;
Var result = parser.parse(json);

如果您关心性能,还要注意 Poco::JSON 解析器的速度,就目前而言,很差,我们将使用Poco::Web::JSON的非常快的解析器或更快的解析器(如果我们能找到/写下来)。底线,1.5.x 仍然是 WIP

希望这可以帮助。

编辑:

Windows 和 Mac 上的基准测试(~15MB JSON 文件):

视窗

Poco::JSON: 1 195 313 [us]
Poco::Web::JSON: 403 320 [us]
json-parser: 321 289 [us]
libjson: 610 352 [us]

MAC(叮当声)

Poco::JSON: 480 965 [我们]
Poco::Web::JSON: 176 297 [我们]
json-parser: 220 172 [我们]

于 2013-04-06T22:34:52.457 回答