我正在尝试使用包含 10000 个元素的布尔数组,并且我的程序出错,因为进入我的文件加载的元素数量超过 10000。
C# 中布尔数组大小是否有最大限制?对于我的项目,我需要分配 100 万个元素。类似于 Boolean[] testBoolArray = new Boolean[1000000]。这会引起任何问题吗?
C# 中布尔数组大小是否有最大限制?
是的,请参阅Array.MaxLength:
此属性表示运行时限制,即运行时在数组中允许的最大元素数(不是字节)。不能保证在此长度下的分配会成功,但所有分配更大数组的尝试都会失败。
在大多数情况下,这应该等于
int.MaxValue
,或 2147483647。因此,一百万个元素应该可以正常工作,除非您在内存非常有限的环境中运行。
出现问题的一个更可能的原因是元素的数量超出了您的预期。因此,由于数组不够大,无法容纳所有元素,某些操作会出错。
在磁盘上的文件中存储可变大小数据的常见方法是在数据前加上长度前缀,类似于:
public static bool[] ReadBoolArray(BinaryReader reader){
var length = reader.ReadInt32();
var result = new bool[length];
for(var i = 0; i < length; i++){
result[i] = reader.ReadBoolean();
}
return result;
}
如果文件不包含数组中的项目数、您对文件存储数据的格式有误,或者文件以某种方式损坏,您可能会遇到问题。