与内联函数一起使用时对象表达式的开销



我喜欢这里接受的答案中使用的思想。我对它的理解是,这是一种将接口用作方法参数而无需实现接口的优雅方式。SRTP用于鸭子类型,以采用一种类型(请原谅OO术语,很高兴学习FP术语(到接口:

let inline namedModel< ^T when ^T : (member Name : string)> (model:^T)= 
{ new INamed with
member x.Name = 
(^T : (member Name : string) model) }

在上面的代码中,我从公认的答案中获取的是内联方法的运行时行为,这让我感到困惑。

在我看来,此方法每次调用时都会创建并返回 INamed 的新实现。正如我在链接问题的评论中问的那样,如果多次调用该方法namedModel这不会给垃圾收集器带来很大的压力吗?

我真的很想使用这种方法,但我不敢继续,以免我对它的内存消耗的理解是正确的。

是的,它将在每次调用时创建一个新对象。

但请记住优化的第一条规则:首先测量,然后优化。您确定在您的情况下,在每次调用时创建一个对象会非常昂贵吗?你测量过吗?

要记住的另一件事是,在普通代码中,您不断创建和丢弃对象,通常甚至没有想到它。.NET 垃圾回收器专门设计用于处理此问题。

相关内容

最新更新