gpt4 book ai didi

c# - 这些代码示例中哪一个具有更好的性能?

转载 作者:行者123 更新时间:2023-11-30 13:14:09 25 4
gpt4 key购买 nike

在对 one of my questions 的回复中,我收到了很多答案,说样式 2 的性能可能比样式 1 好。我不明白这是怎么回事,因为我相信它们应该发出本质上相同的机器指令(如果用 C++ 编写)。您能否解释一下为什么样式 2 可能表现更好?

为了便于引用,我将在这里重写这两种样式:

样式 1:

while (!String.IsNullOrEmpty(msg = reader.readMsg()))
{
RaiseMessageReceived();
if (parseMsg)
{
ParsedMsg parsedMsg = parser.parseMsg(msg);
RaiseMessageParsed();
if (processMsg)
{
process(parsedMsg);
RaiseMessageProcessed();
}
}
}

样式 2:

while (!String.IsNullOrEmpty(msg = reader.readMsg()))
{
RaiseMessageReceived();
if (!parseMsg) continue;

ParsedMsg parsedMsg = parser.parseMsg(msg);
RaiseMessageParsed();
if (!processMsg) continue;

process(parsedMsg);
RaiseMessageProcessed();
}

最佳答案

我认为即使完全不同,性能也可以忽略不计。无论如何,编译器可能会将它们优化为相同的形式。

唯一实质性的区别是风格。

我喜欢样式 1,因为循环有一个入口点(每次迭代)和一个导出点(每次迭代),因此很容易在循环末尾插入调试代码并知道它会被调用。这与函数的一个入口点和导出点背后的原理相同(出于相同的原因)。话虽这么说,但过多的缩进可能难以阅读,所以继续也有它的位置。

关于c# - 这些代码示例中哪一个具有更好的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/404698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com