2010-02-15 53 views
0

我有大量數據作爲byte []對象在我的應用程序中傳遞。這也是在很多情況下都成爲記憶問題的原因。怎麼樣,如果我在一類包裝字節[]像在一個類中包裝字節[]以減少內存開銷

[Serializable接口] 公共MyClass類 { 公衆的byte []資料{獲得;組; } }

你們是否認爲我會獲得任何性能becoz現在引用類型將傳遞一個值類型,因此數據不必每次都被複制。

期待您的答案

+3

數組已經是引用類型。 –

回答

13

爲什麼要進行改進?它只會讓事情變得更糟。 A byte[]本身是一個引用類型,而不是一個值類型。效果將是該類的間接和堆分配的一個不必要的級別。

1

您是否嘗試過使用內存分析工具來查找內存泄漏的位置?

我認爲如果您使用像dotTrace這樣的工具來執行實際的內存配置文件,然後發現程序的哪些部分正在耗盡內存,您可以更容易地識別出您的問題。

這是您唯一一次能夠爲您的記憶問題找到真正的解決方案。

0

這並不重要,因爲字節數組仍然存在。但是,如果你願意爲內存犧牲性能,我會建議你確實將你的字節數組包裝在一個對象中,但是保持數組本身在磁盤上,並且只在你需要時纔讀取它。即一個proxy對象。

當然,這取決於您的應用程序以及您如何使用字節。例如,如果客戶端只需要部分數組,您甚至可能不需要加載整個數組。

0

正如Mehrad Afshari已經指出的那樣,byte []已經是一個引用類型。

注意事項:

你應該檢查你引用的同一個實例在適當情況下(即確保你沒有反序列化的只讀訪問多次的情況下),你可能希望實現某種程度的壓縮,如果合適。還要考慮是否可以將數組分割成更小的塊並按順序對它們進行操作。