Json.Net仅在Visual Studio中抛出OutOfMemoryException

Ric .Net

我有一些奇怪的行为,我无法弄清楚。

我正在使用WCF服务将文件保存到某个数据库表中。WCF服务有一个采用JSON字符串作为参数的单一方法。在这种情况下,JSON是一个序列化命令,其中包含List<FileData>其他属性。WCF服务反序列化JSON并CommandHandler为该特定命令运行

最终用户尝试上传大小为52 MB的文件时遇到错误。WCF服务返回404错误。

我能够在Visual Studio中重现此内容。根据本文更改配置文件后,404消失了。

但是现在出现了一个新的例外:当命令已成功序列化客户端(由WCF成功处理)时,反序列化将抛出OutOfMemoryException这是堆栈跟踪的顶部:

在Newtonsoft.Json.JsonTextReader.ReadStringIntoBuffer(字符引用)在Newtonsoft.Json.Json.Reader.ReadStringIntoBuffer(字符引用) Newtonsoft.Json.Json.ReaderByte.Internal()的Newtonsoft.Json.Json.Json.ReaderByte.Internal()的Newtonsoft.Json.Json.Json.ReaderByte。 ReadForType(JsonReader阅读器,JsonContract合同,布尔值hasConverter)

我编写了一个单元测试来证明该错误。但是无论如何,这个测试都通过了,换句话说,没有OutOfMemoryException抛出。

为了完整性而进行的测试:

    [TestMethod]
    public void LoadBigFile_SerializeDeserialize_DoesntThrowOutOfMemoryException()
    {
        // Arrange
        byte[] bytes = new byte[80000000];
        Random r = new Random(23);
        r.NextBytes(bytes);

        var command = new SomeCommand(new List<FileData>
        {
            new FileData(
                fileFullName: @"D:\SomePdfFile.pdf",
                modifyDate: DateTime.MaxValue,
                data: bytes
                )
        });

        var data = JsonConvert.SerializeObject(command);

        // Act
        var deserializedCommand = 
              JsonConvert.DeserializeObject<SomeCommand>(data);

        // Assert
        Assert.AreEqual(bytes.Length, deserializedCommand.Files.First().Data.Length);
    }

因此,我趁机改变了生产环境中的配置文件,并尝试上传相同的文件。就是这样!!!没有OutOfMemoryException

现在我的问题是,为什么OutOfMemoryException只在Visual Studio中发生这种情况,而在同一VS实例中却没有单元测试呢?我无法在Visual Studio中测试在生产环境中上传大文件时感到有点奇怪。请注意,我也尝试像在发布模式下一样在Debug中运行。

一些细节:

  • 使用Json.Net 7.0.1
  • Visual Studio 2015更新2
  • WCF本地托管在IIS Express中,IIS在生产中
  • Windows 10最新版本64位
  • 生产服务器Windows Server 2008 R2 64位
  • .Net Framework 4.5.2
Aleksey L.

OutOfMemoryException通过更改byte[] bytes = new byte[80000000];byte[] bytes = new byte[52000000];并循环运行(2次)复制单元测试中的内容测试运行程序是32位。

回到IIS Express-我认为您使用的是32位版本。您可以在以下位置更改

工具| 选项| 项目和解决方案| 网络项目| 使用IIS Express的64位版本

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Json.Net仅在Visual Studio中抛出OutOfMemoryException

来自分类Dev

仅在发行版中编译时抛出OutOfMemoryException

来自分类Dev

Json.net无法在Visual Studio 2012中安装

来自分类Dev

C#-Visual Studio中的System.OutOfMemoryException

来自分类Dev

在 ASP.Net (Visual Studio 2013) 中以结构格式解析 Json 数据

来自分类Dev

Visual Studio 2015(社区)中的Python(WinPython 3.4)抛出KeyError

来自分类Dev

Visual Studio 2015(社区)中的Python(WinPython 3.4)抛出KeyError

来自分类Dev

仅在Windows 8.1中为BitmapImage OutOfMemoryException

来自分类Dev

Web Essentials浏览器链接仅在ASP.net 5应用程序中不能在Visual Studio 2015中工作

来自分类Dev

Visual Studio中的.NET版本

来自分类Dev

Visual Studio 2013仅在调试菜单中显示附加

来自分类Dev

仅在TFS Visual Studio中获得某些项目

来自分类Dev

如何仅在Visual Studio的智能感知中查看事件?

来自分类Dev

仅在TFS Visual Studio中获得某些项目

来自分类Dev

Unity中的Json.NET抛出“找不到类型或名称空间`Newtonsoft`”

来自分类Dev

为JSON文件提供JSON模式,例如在Visual Studio Code中设置JSON

来自分类Dev

将JSON字符串粘贴到Visual Studio中

来自分类Dev

Visual Studio 在 JSON 文件中查找大于 2147483647 的整数值

来自分类Dev

Visual Studio 在 package.json 中显示错误

来自分类Dev

Visual Studio Team Services:使用RestSharp和JSON.NET获取所有工作项

来自分类Dev

Visual Studio Team Services:使用RestSharp和JSON.NET获取所有工作项

来自分类Dev

Json仅在特定方法中忽略属性

来自分类Dev

如何仅在api json中获得Year

来自分类Dev

JSON 仅在 swift 中解析特定的键

来自分类Dev

在Visual Studio 2012中使用newton.jsoft(json.net)将c#转换为vb .net时发生翻译错误

来自分类Dev

.net核心未连接到Visual Studio调试中appsettings.json连接字符串中已更改的数据库

来自分类Dev

在Visual Studio 2010 Ultimate中,如何在VB.NET中获得100%的“捕获并重新抛出”块的代码覆盖率?

来自分类Dev

Visual Studio代码中的JSON文件错误:预期的逗号json(514)

来自分类Dev

在JSON.NET中解析JSON数组

Related 相关文章

  1. 1

    Json.Net仅在Visual Studio中抛出OutOfMemoryException

  2. 2

    仅在发行版中编译时抛出OutOfMemoryException

  3. 3

    Json.net无法在Visual Studio 2012中安装

  4. 4

    C#-Visual Studio中的System.OutOfMemoryException

  5. 5

    在 ASP.Net (Visual Studio 2013) 中以结构格式解析 Json 数据

  6. 6

    Visual Studio 2015(社区)中的Python(WinPython 3.4)抛出KeyError

  7. 7

    Visual Studio 2015(社区)中的Python(WinPython 3.4)抛出KeyError

  8. 8

    仅在Windows 8.1中为BitmapImage OutOfMemoryException

  9. 9

    Web Essentials浏览器链接仅在ASP.net 5应用程序中不能在Visual Studio 2015中工作

  10. 10

    Visual Studio中的.NET版本

  11. 11

    Visual Studio 2013仅在调试菜单中显示附加

  12. 12

    仅在TFS Visual Studio中获得某些项目

  13. 13

    如何仅在Visual Studio的智能感知中查看事件?

  14. 14

    仅在TFS Visual Studio中获得某些项目

  15. 15

    Unity中的Json.NET抛出“找不到类型或名称空间`Newtonsoft`”

  16. 16

    为JSON文件提供JSON模式,例如在Visual Studio Code中设置JSON

  17. 17

    将JSON字符串粘贴到Visual Studio中

  18. 18

    Visual Studio 在 JSON 文件中查找大于 2147483647 的整数值

  19. 19

    Visual Studio 在 package.json 中显示错误

  20. 20

    Visual Studio Team Services:使用RestSharp和JSON.NET获取所有工作项

  21. 21

    Visual Studio Team Services:使用RestSharp和JSON.NET获取所有工作项

  22. 22

    Json仅在特定方法中忽略属性

  23. 23

    如何仅在api json中获得Year

  24. 24

    JSON 仅在 swift 中解析特定的键

  25. 25

    在Visual Studio 2012中使用newton.jsoft(json.net)将c#转换为vb .net时发生翻译错误

  26. 26

    .net核心未连接到Visual Studio调试中appsettings.json连接字符串中已更改的数据库

  27. 27

    在Visual Studio 2010 Ultimate中,如何在VB.NET中获得100%的“捕获并重新抛出”块的代码覆盖率?

  28. 28

    Visual Studio代码中的JSON文件错误:预期的逗号json(514)

  29. 29

    在JSON.NET中解析JSON数组

热门标签

归档