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

时间:2015-10-31 04:22:40

标签: c# string performance

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

where(string1 == this.string1)。Where(string2 == this.string2)。Where(string3 == this.string3)

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

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

2 个答案:

答案 0 :(得分:0)

是的。但除非有足够的这些对象,否则性能上的差异可以忽略不计。

答案 1 :(得分:0)

如果"多次"大约几千,那么我不担心创建对象的性能。只有当你创建这么多时,应用程序才必须经常执行垃圾收集来清理未使用的对象,对于具有3个属性的对象,除非你的字符串非常大,否则需要大约数百万。

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

尝试重用该对象可能意味着将其移至不必要的更高级别范围。即更改对属性或类似属性的本地引用。

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

<强>更新

  

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

你并没有在内存分配方面节省太多。由于每次都要分配新的字符串,因此大多数分配都是在创建字符串时,而不是在创建对象时。

外部对象只包含3个以上的指针。

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

如果您打算进行优化,那么您的工作应该集中在最有利的地方。致力于优化的努力应从分析开始,以确定慢点的位置。这意味着优化那些被测量为问题区域的东西。