我自然而然地使用xmltextreader并使用多个优化技巧和提示将解析时间从早期的90秒缩短到大约40秒
但我想进一步节省处理时间,因此我可以在问题之下
相当多的元素是xs:boolean类型,数据提供者总是将值表示为“true”或“false” - 从不“1”或“0”
对于这种情况,我最早的代码是:
if (xmlTextReader.Value == "true")
{
bool subtitled = true;
}
我进一步优化为:
if (string.Equals(xmlTextReader.Value, "true", StringComparison.OrdinalIgnoreCase))
{
bool subtitled = true;
}
我想知道下面是否会最快(因为它的“真”或“假”)?
if (xtr.value.length == 4)
{
bool subtitled = true;
}
答案 0 :(得分:7)
是的,它更快,因为你只比较一个值,即字符串的长度。
通过比较两个字符串,只要两个字符相同,就可以比较每个字符。因此,如果您找到字符串"true"
的匹配项,那么在谓词评估为true
之前,您将进行4次比较。
这个解决方案唯一的问题是,如果有一天价值会从true
改为让我们说1
,那么你将会遇到问题。
答案 1 :(得分:4)
比较长度会更快,但可读性更低。除非我描述代码的性能并得出结论我需要这种优化,否则我不会使用它。
答案 2 :(得分:3)
将第一个字符与“t”进行比较怎么样?
应该(也许:)比比较整个字符串更快..
答案 3 :(得分:2)
测量长度几乎总是更快。也就是说,除非这是微优化的实验,否则我只关注使代码可读并传达正确的语义。
您也可以尝试使用以下方法:
Boolean.TryParse(xmlTextReader.Value, out subtitled)
我知道这与你的问题无关,但我想我还是会把它扔出去。
答案 4 :(得分:0)
你不能写一个单元测试吗?例如,运行每个方案1000次并比较日期时间。
答案 5 :(得分:0)
如果你知道它是“真”或“假”,那么最后一个片段必须是最快的。
无论如何,你也可以写:
bool subtitled = (xtr.Value.length == 4);
那应该更快。
答案 6 :(得分:0)
我知道一个老问题,但是被接受的答案是错误的,或者至少是错误的解释。
比较长度可能稍快一点,但这只是因为string.Equals在检查长度并确定它们不等于字符串之前可能还会进行其他比较。
所以在实践中,这是最后的优化。
Here,您可以找到.NET核心字符串比较的源。
答案 7 :(得分:-2)
.Net中的字符串比较和解析非常慢,我建议在.Net中避免使用字符串解析/比较。
如果您被迫这样做 - 使用高度优化的非托管或不安全代码并使用并行性。
IMHO。