gpt4 book ai didi

c# - 内存和代码平衡

转载 作者:行者123 更新时间:2023-11-30 21:00:56 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




9年前关闭。




我知道这是一个老话题,但是在我的编程过程中我总是遇到这样一个问题:如何平衡内存使用和代码大小?

这是一个例子:

我想实现一个类(在 C# 中),并且我希望构造函数接受各种不同类型的参数。所以我需要一个构造函数来接受一个 IEnumerable 对象(这包括数组、列表等),但我还需要一个构造函数来接受可变长度参数(使用 参数 )。这两个构造函数的内部构造例程完全一样,但是为了允许变长参数,我还是需要后一个。

Foo(IEnumerable<Bar> a) {/*construction*/}
Foo(params Bar[] a) {/*the same construction like above*/}

但是,我可以使用 对参数数组进行转换。参数 并调用另一个构造函数:
Foo(params Bar[] a) : this(new List<Bar>(a)) {/*here empty*/}

虽然使用这种方式减少了代码大小,但它引入了一个临时列表对象,因此增加了内存使用量(虽然也是临时的)。

我知道这个例子会有很多讨论,关于哪个更好。但是我想知道,你们一般会如何处理这种平衡问题。很多情况下情况会比较复杂,有时还需要考虑执行时间的平衡。

有一个原则叫做“不要重复自己”,这是否也适用于像这里的示例这样的小段代码?

最佳答案

您无需从 params 创建列表大批。一个 Bar[]数组是 IEnumerable<Bar> ,因此您可以在不创建任何新对象的情况下使用它。只需将其强制转换,以便它调用正确的构造函数,而不是它本身(或者只是为了清楚它的作用):

Foo(params Bar[] a) : this((IEnumerable<Bar>)a) {}

对于这不可能的任何情况,通常您可以添加一个私有(private)构造函数,该构造函数可以完成其他构造函数的工作,因此仍然只有一个地方的代码。即使可以处理更多情况的代码变得有点复杂,这通常仍然比拥有两段几乎完成相同事情的代码更可取。

关于c# - 内存和代码平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14560808/

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