[英]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.