我有大量數據作爲byte []對象在我的應用程序中傳遞。這也是在很多情況下都成爲記憶問題的原因。怎麼樣,如果我在一類包裝字節[]像在一個類中包裝字節[]以減少內存開銷
[Serializable接口] 公共MyClass類 { 公衆的byte []資料{獲得;組; } }
你們是否認爲我會獲得任何性能becoz現在引用類型將傳遞一個值類型,因此數據不必每次都被複制。
期待您的答案
我有大量數據作爲byte []對象在我的應用程序中傳遞。這也是在很多情況下都成爲記憶問題的原因。怎麼樣,如果我在一類包裝字節[]像在一個類中包裝字節[]以減少內存開銷
[Serializable接口] 公共MyClass類 { 公衆的byte []資料{獲得;組; } }
你們是否認爲我會獲得任何性能becoz現在引用類型將傳遞一個值類型,因此數據不必每次都被複制。
期待您的答案
爲什麼要進行改進?它只會讓事情變得更糟。 A byte[]
本身是一個引用類型,而不是一個值類型。效果將是該類的間接和堆分配的一個不必要的級別。
您是否嘗試過使用內存分析工具來查找內存泄漏的位置?
我認爲如果您使用像dotTrace這樣的工具來執行實際的內存配置文件,然後發現程序的哪些部分正在耗盡內存,您可以更容易地識別出您的問題。
這是您唯一一次能夠爲您的記憶問題找到真正的解決方案。
這並不重要,因爲字節數組仍然存在。但是,如果你願意爲內存犧牲性能,我會建議你確實將你的字節數組包裝在一個對象中,但是保持數組本身在磁盤上,並且只在你需要時纔讀取它。即一個proxy對象。
當然,這取決於您的應用程序以及您如何使用字節。例如,如果客戶端只需要部分數組,您甚至可能不需要加載整個數組。
正如Mehrad Afshari已經指出的那樣,byte []已經是一個引用類型。
注意事項:
你應該檢查你引用的同一個實例在適當情況下(即確保你沒有反序列化的只讀訪問多次的情況下),你可能希望實現某種程度的壓縮,如果合適。還要考慮是否可以將數組分割成更小的塊並按順序對它們進行操作。
數組已經是引用類型。 –