【问题标题】:gcAllowVeryLargeObjects in UnitTests单元测试中的 gcAllowVeryLargeObjects
【发布时间】:2021-05-18 15:32:49
【问题描述】:

在我的 C# 应用程序中,我使用 gcAllowVeryLargeObjects,因为我正在对大型数据集进行图像处理,从而导致大量 RAM 使用。现在我想写一些单元测试,我遇到了没有gcAllowVeryLargeObjects的情况。

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

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

【问题讨论】:

  • 你用的是什么单元测试框架?
  • 只是标准的 MSTest,但我也可以使用 NUnit

标签: json out-of-memory gcallowverylargeobjects


【解决方案1】:

请记住,这只会扩大相关数组的总内存占用。您仍然受限于标准 UInt32 索引大小。如果您的数组有超过 21.4 亿个数据点,它仍然会出错,因为您将超出数组中允许的条目数。

【讨论】:

    【解决方案2】:

    我找不到明确的答案。可以使用 .runsettings 文件进行设置:

    <?xml version="1.0" encoding="utf-8"?>
    <RunSettings>
      <RunConfiguration>
        <runtime>  
          <gcAllowVeryLargeObjects enabled="true" />  
        </runtime>  
      </RunConfiguration>
    </RunSettings>
    

    【讨论】:

    • 抱歉耽搁了这么久,但我终于可以测试了。我不知道这个 .runsettings 确实存在,但这种方法还不错。不幸的是,它没有按预期工作。当 gcAllowVeryLargeObjects 被禁用时,运行和调试测试会导致预期的异常。但我会挖掘一点关于.runsettings,希望会有一个解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多