关于C#:Class方法VS Class静态函数VS简单函数-性能方面?

 2021-04-09 

Class methods VS Class static functions VS Simple functions - Performance-wise?

好的,这就是我想要的:

  • 我已经写了几个要求非常严格的功能(主要是在位图上运行),这些功能必须尽可能快
  • 现在,我们还要提到,这些函数也可以按类型分组,甚至可以按其操作的变量类型分组。
  • 而且,事情是,除了算法的实现之外,从技术angular来看,我应该做的是为了不影响速度。

现在,我正在考虑以下情形:

  • 将它们创建为简单函数,然后将必要的参数作为参数传递
  • 创建一个类(出于"分组" /组织目的),然后将其声明为静态
  • 按类型创建课程,例如创建一个用于处理位图的类,为每个位图创建一个该类的新实例(例如Bitmap* myBitmap = newBitmap(1010);),并使用其内部方法(例如myBitmap->getFirstBitSet())对其进行操作

现在,以下哪种方法最快?在性能方面,直接的简单函数和类封装的static函数之间真的有区别吗?我没有提到的任何其他更可取的方案?

旁注:我正在使用clang++编译器,用于Mac OS X 10.6.8。 (如果有任何不同)


在CPU级别上,只有一种功能,并且非常类似于C类型。您可以自己制作,但是...

事实证明,以效率为中心的C语言将大多数功能直接映射为调用指令:

  • 命名空间级别的函数就像常规的C函数
  • 静态方法就像名称空间级别的函数(从调用的angular来看)
  • 非静态方法与静态方法非常相似,只不过在其他参数(一个指针)的顶部传递了隐式this参数

这3个人具有完全相同的表现。

另一方面,virtual方法的开销很小。有一份关于性能的C技术报告,该报告估计与非虚拟方法相比,空函数的开销在10%到15%之间(来自内存)。这意味着,对于内部有肉类的任何功能(即,进行实际工作),开销本身几乎都会被噪音所掩盖。实际成本来自禁止内联,除非可以在编译时推断virtual调用。


经典的旧C函数和类的静态方法之间绝对没有区别。区别仅在于美学。如果您有多个C函数之间有一定的联系,则可以:

  • 将他们分组
  • 将它们放置在命名空间中;

区别再次将是美学上的。这很有可能会提高可读性。

如果这些C函数共享某些静态数据,则有可能(如果可能)将这些数据定义为类的私有静态数据成员。在这种情况下,具有类的变量比具有名称空间的变量更可取。

我不鼓励您创建虚拟实例。这会误导源代码的读者。

为每个位图创建一个实例是可能的,甚至可能是有利的。特别是如果您在典型情况下多次在此实例上调用方法。