繁体   English   中英

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

[英]C# - Performance of reusing object with string properties vs creating new instance

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

其中(string1 == this.string1).Where(string2 == this.string2).Where(string3 == this.string3)

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

有没有一种更快的方法来执行上述LINQ查询呢?

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

如果“几次”大约是几千次,那么我不必担心创建对象的性能。 仅当您创建的应用程序如此之多,以至应用程序不得不频繁执行垃圾回收来清理未使用的对象时,对于具有3个属性的对象,除非字符串非常大,否则它的数量级必须达到数百万。

您更有可能通过尝试重用对象来创建错误,因为您冒着忘记在重用之间清理对象状态的风险。

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

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

更新:

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

您在内存分配领域没有节省太多。 由于您每次都分配新的字符串,因此大多数分配是在字符串的创建中,而不是在对象的创建中。

外部对象仅包含3个指针。

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

如果您要努力进行优化,则应将精力集中在最有利的方面。 致力于优化的工作应从概要分析开始,以确定您的慢点在哪里。 这意味着优化那些已被测量为问题区域的事物。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM