0

我觉得这个类定义有点奇怪: http ://www.extremeoptimization.com/Documentation/Reference/Extreme.Mathematics.LinearAlgebra.SingleLeastSquaresSolver_Members.aspx

Solve 方法确实有一个返回值,但不需要,因为结果也可以在 Solution 属性中使用。

这是我认为的传统代码:

var sqrt2 = Math.Sqrt(2)

这将是与链接中的求解器具有相同精神的替代方案:

var sqrtCalculator = new SqrtCalculator();
sqrtCalculator.Parameter = 2;
sqrtCalculator.Run();
var sqrt2 = sqrtCalculator.Result;

除了第二个版本有点“非传统”之外,还有什么优点和缺点?

是的,编译器不会帮助忘记分配某些属性(参数)的用户,但是所有包含可写属性并且在构造函数中没有强制值的组件都是这种情况。

是的,线程不起作用,但是每个线程都可以创建自己的求解器。

是的,垃圾收集器将无法处理求解器的结果,但是如果整个求解器都被处理掉了,它就会处理掉。

是的,编译器和处理器对参数和返回值进行了特殊处理,这使得它们速度很快,但是参数处理的时间几乎可以忽略不计。

等等。其他想法?

4

1 回答 1

0

好吧,一年后,我发现这种“内向”的方法有一个明显的缺陷。我正在使用一个现有的过滤器对象,它应该对测量对象进行操作,而是以上述“只有我,没有别的”的方式对自身进行操作。现在客户想要在第一次计算几分钟后重新计算一个测量对象,同时过滤器已经处理了其他测量对象。如果它是无状态的并将其数据存储在测量对象中,那么实现 Recalculate 方法将是一件容易的事。解决内向过滤器问题的唯一方法是让过滤器实例成为测量对象的一部分。然后需要为每个新的测量对象实例化过滤器。由于过滤器是链的一部分,因此需要重新创建整个链。

于 2013-09-30T17:12:29.560 回答