C#-重用具有字符串属性的对象与创建新实例的性能

本文关键字:新实例 创建 性能 实例 对象 属性 字符串 C#- | 更新日期: 2023-09-27 18:20:02

假设我有一个包含3个字符串属性的类A。在整个应用程序中,A的新实例被不必要地创建了好几次。A类所做的就是使用这3个字符串来执行LINQ查询,比如:

Where(string1==this.string1).Where(string 2==this.string 2).Where(string 3==this.string 3)

我不是每次需要对象时都创建一个实例,而是考虑修改使用这种类型的类来存储对象的一个实例并在每次使用它之前修改字符串属性。这是优化类的正确方法吗?基本上,我试图避免每次创建实例和为字符串分配内存的开销。

是否有更快的方法来执行上述LINQ查询?

C#-重用具有字符串属性的对象与创建新实例的性能

是的。但除非有很多这样的对象,否则性能的差异将可以忽略不计。

如果"几次"的数量级是几千,那么我就不会担心创建对象的性能了。只有当您创建的对象太多,以至于应用程序不得不频繁地执行垃圾收集来清理未使用的对象时,对于一个具有3个属性的对象来说,除非您的字符串非常大,否则需要数百万个垃圾收集。

您更有可能通过尝试重用对象来创建bug,因为您可能会在重用之间忘记清理对象状态。

尝试重用对象可能意味着将其移动到比必要级别更高的范围。即更改对某个属性的本地引用或类似内容。

保持代码简单,而不是过早地实现优化,这样,当您遇到优化非常重要的情况时,您可以更容易地实现优化。如果你过度优化了你所能想象的一切,那么你最终会得到一个过于复杂的代码库。

更新:

我正在考虑修改使用此类型存储的类一个对象实例,然后修改字符串属性每次使用之前。这是优化班

在内存分配领域,您并没有节省太多。由于每次都要分配新的字符串,所以大部分分配都是在创建字符串时进行的,而不是在创建对象时进行的。

外部对象由3个以上的指针组成。

无论是否重复使用同一个对象,大部分内存分配都是每次创建字符串。

如果你要把精力放在优化上,你的精力应该集中在最有益的地方。致力于优化的工作应该从分析开始,以确定您的慢点在哪里。这意味着优化那些被测量为问题领域的东西。