问题标签 [gcallowverylargeobjects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
674 浏览

arrays - 你如何创建一个大数组?

给定

r.GetBytes(...)返回Int64 SinceArray.zeroCreateArray.inittakeInt32如何创建一个可能大于的空数组Int32.MaxValue

0 投票
2 回答
3490 浏览

c# - 具有超过 65535^2 个元素的二维数组 --> 数组尺寸超出了支持的范围

我有一台具有 128 GB RAM 的 64 位 PC,我正在使用 C# 和 .NET 4.5。我有以下代码:

我知道<gcAllowVeryLargeObjects enabled="true" />并已将其设置为 true。

为什么一个多维数组不能有超过 4294967295 个元素?我看到了以下答案https://stackoverflow.com/a/2338797/7556646

我还检查了gcAllowVeryLargeObjects的文档,我看到了以下评论。

数组中的最大元素数为UInt32.MaxValue (4294967295)。

我不明白为什么会有这个限制?有解决方法吗?是否计划在即将发布的 .net 版本中取消此限制?

我需要内存中的元素,因为我想计算例如使用英特尔 MKL 的对称特征值分解。

0 投票
1 回答
762 浏览

c# - Array.Copy --> 不支持大于 2GB 的数组

我正在使用Array.Copy Method (Array, Array, Int64)。我有以下静态方法

和下面的代码来测试它

我知道<gcAllowVeryLargeObjects enabled="true" />并已将其设置为 true。

我在Array.Copy Method (Array, Array, Int64)的文档中看到,长度参数有以下注释。

一个 64 位整数,表示要复制的元素数。整数必须介于零和Int32.MaxValue之间,包括在内。

我不明白为什么当类型是时长度参数有这个限制Int64?有解决方法吗?是否计划在即将发布的 .net 版本中取消此限制?

0 投票
0 回答
53 浏览

c# - 将正则表达式与我的自定义“BigStringBuilder”类集成

由于.NET Framework 有大约 21.5 亿个元素限制(即使考虑到 64 位 Windows、.NET 4.5+ 和 gcAllowVeryLargeObjects),我需要创建自己的BigStringBuilder来处理超大字符串。

不幸的是,现在我需要在课堂上使用正则表达式。似乎存在代码以在 StringBuilders 上运行更简单的 Regex 风格,尽管它显然没有经过很好的测试并且仅支持*(替换许多字符)和?(替换单个字符)。

无论如何,我没有使用 StringBuilder,如前所述,我使用的是我自己的 BigStringBuilder 类,其中基本的底层结构是一个 char 数组列表(即:)List<char[]> c = new List<char[]>();。要检索巨型字符串中的任何字符,使用“聪明”索引器来访问矩形结构:

老实说,这并不是那么“聪明”,但这确实意味着所有字符串数据都可能分散在 List 中的众多 char 数组中。

我正在寻找允许 Regex(包括Regex.Replace())与此 BigStringBuilder 类一起工作的最有效方法或任何见解,请记住字符串可能比 2GB 大得多。

0 投票
1 回答
798 浏览

c# - 为什么 C# 数组仍然限制在约 21 亿个元素中

在 .Net 4.5gcAllowVeryLargeObjects中引入了允许 64 位系统大小大于 2gb 的数组。然而,数组曾经(并且仍然)被限制在大约 42 亿个元素和大约 21 亿个维度中。为什么?

对它没有兴趣,还是存在阻止他们在 .Net 核心类(数组、列表等)中使用字长索引器的实际问题?

C# 已经允许自定义类中的长类型索引器,并且将索引器从 int 更改为 long 以用于 64 位构建将是非破坏性的(我相信),因为 int 始终可以转换为 long。

0 投票
2 回答
229 浏览

c# - gcAllowVeryLargeObjects 已设置但仍导致 System.ArgumentOutOfRangeException

我有点没有想法。使用以下代码,我尝试实例化一个大于 2GB 的字节数组:

每次它都会导致一个System.ArgumentOutOfRangeException异常的消息arrays larger then 2GB are not supported

我的 App.config 目前如下:

此外,该项目的目标平台是x64

我会很感激任何想法。如果缺少任何信息,我会尽快更新问题。

更新 1

我也试过uint.MaxValue

0 投票
2 回答
89 浏览

json - 单元测试中的 gcAllowVeryLargeObjects

在我的 C# 应用程序中,我使用gcAllowVeryLargeObjects的是因为我正在使用大型数据集进行图像处理,从而导致大量 RAM 使用。现在我想编写一些 UnitTests 并且我遇到了与没有gcAllowVeryLargeObjects.

我的设置是关于使用 Newtonsoft.Json 读取包含大型一维字节数组的 JSON 文件。我遇到的最初错误是ObjectOutOfMemoryException反序列化文件时的经典错误。异常消息是:数组尺寸超出了支持的范围

我使用它进行了管理<gcAllowVeryLargeObjects enabled="true"/>,现在 Newtonsoft.Json 没有任何问题。但是对于 UnitTest,我不知道如何设置这个运行时参数。希望你们中的一个人有一个想法。