Can*_*non -1 .net c# data-structures
我正在尝试将电子表格数据捕获到2D数组中.我正在使用VSTO.
int rc = 1048576;
int cc = 1638;
string[,] arr = new string[rc, cc];
Run Code Online (Sandbox Code Playgroud)
最后一行抛出Out of Memory异常.我想显示消息告诉用户只能捕获'X'元素.
检查MSDN并提到了16,777,216的行计数限制.无数据表的列数限制.无法找到2D阵列的限制.
我的问题不是为什么例外.我正在寻找的是,如果您正在进行VSTO开发,并且必须捕获DataTable中的工作表以执行内存中连接等,您将需要这样做:
string[,] arr = new string[rc, cc];
Microsoft.Office.Interop.Excel.Range selection
arr = selection.Value as string[,];
Run Code Online (Sandbox Code Playgroud)
然后将该数组中的数据复制到datatable.现在,用户应该选择的元素数量的理想限制是什么.因此,当选择超出此条件时,我可以设置rowcount/columncount lmits并显示消息.
Dar*_*rov 16
我们来做数学吧.您正在尝试分配具有1048576*1638 = 1717567488元素的2D字符串数组.x64上字符串引用的大小为8个字节=>总共1717567488*8 = 13740539904个字节.这大约是13 GB的连续内存空间.CLR的单个分配的最大大小为2GB,因此您将获得OutOfMemoryException,因为无法分配单个块.
请注意,即使所有字符串都长1-2个字符,这样的字符串数量除了引用之外还需要30GB的字符串值.除了OutOfMemoryException你期望得到的还有什么?
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |