作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在添加到 C# List 时明确检查/处理您没有达到 2^31 - 1(?)最大条目数是疯狂的,是真的还是假的?
(假设这是一个平均列表大小小于 100 的应用。)
最佳答案
<强>1。内存限制
嗯,没有任何属性的 System.Object 的大小是 8 字节(2x32 位指针),或者在 64 位系统中是 16 字节。 [编辑:]实际上,我刚刚检查了 WinDbg,在 x86(32 位)上大小为 12 字节。
因此在 32 位系统中,您将需要 24Gb 内存(在 32 位系统中您不能拥有)。
<强>2。程序设计
我坚信这么大的列表不应该保存在内存中,而应该保存在其他一些存储介质中。但在那种情况下,您始终可以选择创建一个缓存 类来包装一个 List,这将在后台处理实际存储。因此,在添加之前测试大小是错误的测试位置,如果有一天您发现有必要,您的 List 实现应该自己完成。
<强>3。为了安全起见
为什么不在每个方法中添加一个重入计数器来防止堆栈溢出? :)
所以,是的,测试它是疯狂的。 :)
关于c# - 将项目添加到 List<T>/防御性编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/781018/
我是一名优秀的程序员,十分优秀!