我想優化一些代碼,我有大量的數組包含不同大小的結構,但基於相同的接口。在某些情況下,結構體積較大,容納的數據較多,而其他結構體系較小,而其他情況下,我希望保留空值作爲節省內存的值。如何確定C#中的非託管數組的大小?
我的第一個問題是。做這樣的事情是一個好主意嗎?我以前有一個完整的數據結構數組,但是當測試混合它時,我幾乎可以節省大量的內存。還有其他缺點嗎?
我一直在嘗試不同的事情,並且在製作一個通用接口數組時接縫工作得很好,但我不確定是否正確地檢查了數組的大小。
爲了簡化這個例子不少。但是我在這裏給數組添加了不同的結構。但我無法使用傳統的Marshal.SizeOf方法來確定大小。簡單地遍歷集合並計算集合中每個值的sizeof是否正確?
IComparable[] myCollection = new IComparable[1000];
myCollection[0] = null;
myCollection[1] = (int)1;
myCollection[2] = "helloo world";
myCollection[3] = long.MaxValue;
System.Runtime.InteropServices.Marshal.SizeOf(myCollection);
最後一行將拋出此異常:
Type 'System.IComparable[]' cannot be marshaled as an unmanaged structure; no meaningful size or offset can be computed.
藉口長崗:
- 這是一個最佳的和可用的解決方案?
- 如何確定我的陣列的大小 ?
我可能是錯的,但它在我看來像你的IComparable []數組是一個託管數組? –