对OOP的帮助 - 页 7

 
fxsaber #:

不正确的比较,因为它没有考虑到自动清除物体的时间。

经修改。

V3之后的123兆字节从何而来,我不知道。

不,它是正确的。而这是一个原则问题。自动删除不会发生在主线程中,因为那里的时间成本极其昂贵。你可以开始一个新的运行,而不需要等待并行线程将使用过的内存返回。是的,它也会被调用,也会消耗CPU资源,但它将是一个在后台执行的侧面操作。有了任何优化,即使是最激进的优化,CPU的一些资源也会被其他线程利用,因为这就是现在所有现代操作系统的工作方式。在现代处理器中对CPU施加100%的负载几乎是不可能的。

--

让我换个说法。假设有一个任务要在5个时间单位内执行。你可以用一个线程在5个单元内执行,或者用两个线程分别在3个和2个单元内执行。显然,总的执行时间将是相同的:5个单位,但在第二种情况下需要的物理时间将减少2个单位,因为在第二种情况下任务是并发的,而在第一种情况下不是。有一种反驳说,优化占据了CPU所有可用的物理核心。但这并不是事实。任何优化最多只能分配与操作系统中核心数量相等的线程数量。然而,除了这些任务之外,还有数百个其他任务将在操作系统中执行,所有8个处理器核心(如果有8个的话)将被分配给系统的数百个线程,而不是优化器分配的8个线程。因此,在8+1或8+8模式下多分配一个线程,总是比天真地认为一旦一个应用程序分配了8个线程,它就会100%地使用所有的CPU资源更明智。

--

一般来说,听到"我们不计算这个时间,因为整个系统的总时间包括这个 时间 "这样的论点是很有趣的"或者"通过new创建的对象的方法被调用得比较慢"的说法--如果是这样,我们也许应该在这个时候对基准进行折算,因为当方法被调用得比较慢而另一种方式比较快时,是不公平的))))))。那么在这种情况下,为什么要假装我们被淹没在表演中?让我们面对现实吧,我们来自90年代,除了 "反正汇编程序更快!"或 "当我用指针工作时,我控制了一切 "这些虚假的口号,我们什么都不承认。

--

第二点。注意V2。那里没有对象的删除,直接的内存泄漏是有目的的。即便如此,对象分配也需要1.4秒,而V1的时间是1.2秒,尽管根本没有花费时间来删除。

fxsaber#:

我不知道V3之后的123Mbytes从何而来。

这很难说。你需要知道mql虚拟机的规格。但没有人知道这一点,除了开发者。从ProcessHacker的分析来看,似乎通过* new选择的对象是以某种棘手的方式在一个地方单独分配的,然后作为大数组移到另一个内存区域。也就是说,它可能是一些临时对象或其他东西。

 
Vasiliy Sokolov #:

不,正确。而这是一个原则问题。自动删除不会发生在主线程中,因为主线程的时间成本是非常昂贵的。你可以开始一个新的运行,而不需要等待并行线程将使用过的内存返回。是的,它也会被调用,也会消耗CPU资源,但它将是一个在后台执行的侧面操作。有了任何优化,即使是最积极的优化,CPU的一部分资源也会被其他线程利用,因为这就是现在所有现代操作系统的工作方式。在现代处理器中对CPU施加100%的负载几乎是不可能的。

--

让我换个说法。假设有一个任务要在5个时间单位内执行。你可以用一个线程在5个单元内执行,或者用两个线程分别在3个和2个单元内执行。显然,总的执行时间将是相同的:5个单位,但在第二种情况下需要的物理时间将减少2个单位,因为在第二种情况下任务是并发的,而在第一种情况下不是。有一种反驳说,优化占据了CPU所有可用的物理核心。但这并不是事实。任何优化最多只能分配与操作系统中核心数量相等的线程数量。然而,除了这些任务之外,还有数百个其他任务将在操作系统中执行,所有8个处理器核心(如果有8个的话)将被分配给系统的数百个线程,而不是优化器分配的8个线程。因此,在8+1或8+8模式下多分配一个线程,总是比天真地认为一旦一个应用程序分配了8个线程,它就会100%地使用所有的CPU资源更明智。

--

一般来说,听到这样的论点是很有趣的:"嗯,我们不计算这个时间,因为整个系统的总时间包括这个时间。"或者"通过new创建的对象的方法被调用得比较慢"的说法--如果是这样,我们也许应该在这个时候对基准进行折算,因为当方法被调用得比较慢而另一种方式比较快时,是不公平的))))))。那么在这种情况下,为什么要假装我们被淹没在表演中?让我们面对现实吧,我们来自90年代,除了 "反正汇编程序更快!"或 "当我用指针工作时,我控制了一切 "这些虚假的口号,我们什么都不承认。

--

第二点。注意V2。那里没有对象的删除,有一个故意的直接内存泄漏。即使如此,对象分配也需要1.4秒,而V1为1.2秒,尽管根本没有花费时间来删除。

这很难说。你需要知道mql虚拟机的规格。而除了开发者,没有人知道这一点。从ProcessHacker的分析来看,通过* new选择的对象似乎是以某种棘手的方式单独分配在一个地方,然后作为大数组移到另一个内存区域。也就是说,它可能是一些临时对象或其他东西。


那么,如果删除的内容不在主线程中,是否包含在测量中又有什么区别?它不像会影响))))。那么,为什么不包括它来看看真相呢?

顺便说一句,瓦西里,那里 有一个问题在等着你(最后一行)。

 
Vasiliy Sokolov #:

...或者说,"用new创建的对象的方法被调用得比较慢"的说法...

你难道没有胆量去测量吗?你是个空壳,瓦夏,你这条响尾蛇。

 
Dmitry Fedoseev #:

你没有胆量去测量吗?

你就不能睡一觉吗!?

 
Vasiliy Sokolov #:

睡一觉就好了!

梦想...和跺脚...

 
Dmitry Fedoseev #:

那么,如果删除不在主线程中,是否包含在测量中又有什么区别?它不像会影响))))。那么,为什么不包括它来看看真相呢?

那么在基准中包括资源管理器、telegram、Chrome在优化过程中运行的总时间。即使你把这些都杀了,只留下MT,也会有一百个其他的系统线程浪费CPU时间,包括它们。

 
Vasiliy Sokolov #:

那么在基准中包括资源管理器、telegram、Chrome在优化过程中运行的总时间。即使你把这些都杀了,只留下MT,也会有一百个其他的系统线程浪费CPU时间,包括它们。

它是在平行线程中))))。(© Vasya)

 

瓦西娅,你真的很蠢!"。

但是继续前进,继续坚持。

 
Dmitry Fedoseev #:

顺便说一句,瓦西里,那里 有一个问题在等着你(最后一行)。

你可以在短时间内证明你是一个空头和零度的编码者。但是,当你年复一年地证明了这一点,在这个论坛上的每一个主题上都有污点,谁又会需要它呢?我花了两年时间没有在这里发过任何东西,只是偶尔看看--而每一次,在每一个线程中都是你,用你的 "权威意见 "的风格 "你们都是白痴,什么都不懂,怎么做--我不说。你是个腐朽的人,迪马。

 
Vasiliy Sokolov #:

你可以在短时间内证明你是个白痴,是个零编码者。但是,当你年复一年地证明这一点,在这个论坛上的每条线上拉屎时,谁需要它。我花了两年时间没有在这里发过任何东西,只是偶尔看看--而每一次,在每一个线程中都是你,用你的 "权威意见 "的风格 "你们都是白痴,什么都不懂,怎么做--我不说。你是个腐朽的人,迪马。

什么,问题是我没有告诉你怎么做对吗?

是的,而且你在这里已经很好地证明了一些东西))

而我才是腐朽的人?我写代码的时候,你就是那个既拉肚子又得瘰疬的人。