簡體   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