我想优化一些代码,我有大量的数组包含不同大小的结构,但基于相同的接口。在某些情况下,结构体积较大,容纳的数据较多,而其他结构体系较小,而其他情况下,我希望保留空值作为节省内存的值。如何确定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 []数组是一个托管数组? –