可以有多少种不同的选择?一个合理的数字?10, 20, 100?即使有100个选择,switch也比OOP工作得快。
我想提醒大家不要以偏概全:这样的效果在mql中是合理的,因为它使用了虚拟的 "伪指针"--本质上是指向真实地址的内部(隐藏)哈希表的句柄。为了解决这样的指针,需要大量的额外时间,远远超过直接指针寻址。 我没有测量过,但很可能在dotNET语言和其他类似的实现中也会发现同样的指针 "瓶颈 "效应。
有 "真正的 "指针的语言不会有这种效果,开关会在那里输掉--选择的列表越大。
所以OOP本质上与此无关......
我想提醒大家不要以偏概全,这样的效果在mql中是合理的,因为它使用了虚拟的 "伪指针"--本质上是指向内部(隐藏的)真实地址哈希表的句柄。为了解决这样的指针,需要大量的额外时间,远远超过直接指针寻址。 我没有测量过,但很可能在dotNET语言和其他类似的实现中也会发现同样的指针 "瓶颈 "效应。
在有 "真正的 "指针的语言中,不会有这样的效果,在那里,开关将失去--选择列表越大。
所以OOP本质上与此无关......
是的,这里是C调。)
7550021 (开关)
2250004 (OOP)
7325029 (开关)
2050015 (OOP)
7550049 (开关)
2150005 (OOP)
7575031 (开关)
2325009 (OOP)
8025038(开关)
2200004 (OOP)
7150027 (开关)
2050014 (OOP)
7375029 (开关)
2200005 (OOP)
7550022 (开关)
1950003 (OOP)
7100021(开关)
2695083 (OOP)
7360033 (开关)
2200008 (OOP)
7825029 (开关)
1925010 (OOP)
7325025 (开关)
2025006 (OOP)
6850035 (开关)
2525014 (OOP)
7750027 (开关)
1975007 (OOP)
8195225 (开关)
2050004 (OOP)
6950020(开关)
2425006 (OOP)
7275029 (开关)
2225015 (OOP)
7050037 (开关)
2200007 (OOP)
7375030(开关)
开始任何测试时,都要证明它是正确的,并实际测量它声称要测量的东西。
上面介绍的内容包含了惊人的错误,表明作者完全不了解编译机制和代码的工作原理。
开始任何测试时,都要证明它是正确的,并实际测量它声称要测量的东西。
上面介绍的内容包含了惊人的错误,表明作者完全不了解编译机制和代码的工作原理。
基类,几个子类,其中一个子类被使用,取决于启动时设置的参数。这是一个众所周知的通用程序运行原则。有多少变体并不重要(即子类),这种情况应该是工作得非常快的,因为没有if和switch调用来改变程序的工作方式,只有在初始化过程中选择了所需的子类,然后一切工作都很直接和简单。
然而......。
能有多少种不同的变体?一个合理的数字?10, 20, 100?即使有100个变体,switch的工作速度也比OOP快。
这里有一个用于比较性能的脚本。它比较了上述的OOP和一个带有函数的简单开关(并且调用了两个函数,其中一个函数的调用 很容易被抛弃)。
结果(调用f99)。