gpt4 book ai didi

c# - Lazy 的缺点?

转载 作者:IT王子 更新时间:2023-10-29 03:51:59 27 4
gpt4 key购买 nike

我最近开始使用 Lazy在我的整个申请过程中,我想知道在使用 Lazy<T> 时是否需要考虑任何明显的负面影响?

我正在尝试利用 Lazy<T>在我认为合适的时候,主要是为了帮助减少我们已加载但不活动的插件的内存占用。

最佳答案

我将对我的评论进行一些扩展,内容如下:

I've just started using Lazy, and find that it's often indicative of bad design; or laziness on the part of the programmer. Also, one disadvantage is that you have to be more vigilant with scoped up variables, and create proper closures.

例如,我使用了 Lazy<T>创建用户可以在我的(无 session )MVC 应用程序中看到的页面。它是一个向导向导,因此用户可能希望转到随机的上一个 步骤。握手时,Lazy<Page> 的数组对象被装箱,如果用户指定为步骤,则评估该确切页面。我发现它提供了良好的性能,但它有一些我不喜欢的方面,例如我的许多 foreach构造现在看起来像这样:

foreach(var something in somethings){
var somethingClosure = something;
list.Add(new Lazy<Page>(() => new Page(somethingClosure));
}

即您必须非常主动地处理关闭问题。否则,我认为存储 lambda 并在需要时对其进行评估不会对性能造成如此糟糕的影响。

另一方面,这可能表明程序员是 Lazy<Programmer> ,从某种意义上说,您现在不想考虑您的程序,而是让适当的逻辑在需要时进行评估,就像我的示例一样 - 而不是构建该数组,我可以找出特定请求的页面将会;但我选择了偷懒,采取了一种全盘投入的方式。

编辑

我突然想到 Lazy<T>在处理并发时也有一些特殊之处。例如有一个 ThreadLocal<T>对于某些场景,以及针对您的特定多线程场景的几个标志配置。您可以在 msdn 上阅读更多内容.

关于c# - Lazy<T> 的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7567342/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com