byte[] 并通过引用有效传递

2023-11-29

因此,这与处理大对象堆并尝试最小化实例化 byte[] 的次数有关。基本上,我遇到了 OutOfMemoryExceptions,我觉得这是因为我们实例化了太多字节数组。当我们处理几个文件时,该程序运行良好,但它需要扩展,而目前还不能。

简而言之,我有一个从数据库中提取文档的循环。目前,它一次提取一个文档,然后处理该文档。文档的大小可以从小于 1 兆到 400 兆以上。 (这就是为什么我一次处理一个)。以下是我优化之前的伪代码。

所以我正在做的步骤是:

  1. 调用数据库查找最大文件大小(然后乘以 1.1)

    var maxDataSize = new BiztalkBinariesData().GetMaxFileSize();
    maxDataSize = (maxDataSize != null && maxDataSize > 0)
        ? (long)(maxDataSize * 1.1)
        : 0;
    var FileToProcess = new byte[maxDataSize];
    
  2. 然后我进行另一个数据库调用,从数据库中提取所有文档(没有数据)并将它们放入 IEnumerable 中。

    UnprocessedDocuments =
        claimDocumentData.Select(StatusCodes.CurrentStatus.WaitingToBeProcessed);
    foreach (var currentDocument in UnprocessDocuments)
    {
         // all of the following code goes here
    }
    
  3. 然后我从外部源填充我的 byte[] 数组:

    FileToProcess = new BiztalkBinariesData()
        .Get(currentDocument.SubmissionSetId, currentDocument.FullFileName);
    
  4. 这是问题所在。将 currentDocument (IClaimDocument) 传递给其他方法来处理会干净得多。因此,如果我将 currentDocument 的数据部分设置为预先格式化的数组,这会使用现有的引用吗?或者这会在大对象堆中创建一个新数组吗?

    currentDocument.Data = FileToProcess;
    
  5. 在循环结束时,我将清除 FileToProcess

    Array.Clear(FileToProcess, 0, FileToProcess.length);
    

说清楚了吗?如果没有,我会尽力清理它。


Step 1:

var FileToProcess = new byte[maxDataSize];

Step 3:

FileToProcess = new BiztalkBinariesData()
    .Get(currentDocument.SubmissionSetId, currentDocument.FullFileName);

您的步骤 1 完全没有必要,因为您在步骤 3 中重新分配了数组 - 您正在创建一个new数组,您不会填充现有数组 - 因此,本质上,步骤 1 只是为 GC 创建更多工作,如果您以快速顺序执行此操作(并且如果编译器没有优化它,这是完全可能的),则可能会解释这一点您所看到的一些内存压力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

byte[] 并通过引用有效传递 的相关文章

随机推荐

  • 为什么我们需要 SqlCeCommand.Parameters.AddWithValue() 来插入值?

    我有一个 C WPF 桌面应用程序 它使用 SQL Compact 3 5 作为其嵌入式数据库 在插入函数中有 using SqlCeCommand com new SqlCeCommand INSERT INTO FooTable VAL
  • 我可以根据字段的值获取枚举吗?

    我想根据其字段值获取特定的枚举 Enum public enum CrimeCategory ASBO Anti Social Behaviour BURG Burglary CRIMDAM Criminal Damage And Arso
  • Python 优雅的 int(string,base) 逆函数

    Python 允许使用 2 36 范围内的任何基数从字符串转换为整数 使用 int string base 我正在寻找一个优雅的反函数 它接受一个整数和一个基数并返回一个字符串 例如 gt gt gt str base 224 15 ee
  • Python从父级子文件夹导入

    我有个问题 我有一个这样的目录设置 folder main py stuff init py function py items init py class py 我的问题是如何将 class py 导入到 function py 中 此设
  • Android 中的嵌套形状

    我正在尝试绘制一个具有三个矩形的形状 纯色 gradient 白线 我怎么做 当我尝试这个时 它不起作用 布局具有父颜色
  • 单击时 WPF 按钮闪烁为白色

    我刚刚创建了 wpf 按钮 当我单击该按钮时 它会像闪烁一样变为白色 并在释放按钮时变回原始颜色 可能是什么问题呢 我没有使用任何效果 下面是我的按钮 xaml 请指教
  • 将 404 错误页面重定向到 Tomcat 中 Spring MVC Web 应用程序的自定义页面

    我正在使用 tomcat 7 并且在 tomcat 7 中构建并部署了 Spring MVC web 应用程序 并且它工作得非常好 我想要的是 每当我的服务器上发生 404 错误时 它应该被重定向到我在 web 应用程序中构建的自定义页面
  • openGL glx.h 缺少 xcode 4 mac lion 形式

    我正在尝试设置一个示例项目 它使用 GLSDK 我使用 premake 设置它 将项目基础 sdk 设置为 10 6 因为我使用的是 xcode 4 但是当我尝试编译时 我从示例文件中得到 GL gl h not found 因此 我手动添
  • ASM:“cmp”的操作数类型不匹配

    我正在执行 x86 汇编代码 并且不断收到此错误 cmp 的操作数类型不匹配 它出现的代码行是 cmpb rdi 0 在 AT T 语法 您使用的语法 中 指令有一个尺寸后缀来指示操作数的大小 尺寸后缀为 b byte 1 bytes w
  • 泛型超级与扩展

    正当我以为我终于理解了泛型时 我遇到了以下示例 public class Organic
  • SQLAlchemy 为每个查询添加注释

    我试图让 SQLAlchemy 为我提交的每个查询添加注释 我从文档中知道我可以做这样的事情 from sqlalchemy sql expression import Insert compiles Insert def prefix i
  • 用于连字符、下划线和数字的 Elasticsearch 自定义分析器

    诚然 我对ES的分析部分不太熟悉 这是索引布局 mappings event properties ipaddress type string hostname type string analyzer my analyzer fields
  • 如何滚动列表视图背景与项目

    我设置了一个图像作为Listview背景 如果我想随着项目滚动它 我该怎么办 例如 1是背景 如果我向下滚动Listview 它将改变从 1 1 1 1 1 1 1 to 1 1 1 1 1 1 1 也许我可以扩展listview并覆盖di
  • 如何使用Python创建一个简单的饼图

    我一直在尝试使用 python 生成一个简单的饼图 仅使用两个变量 代表百分比 我总是遇到错误 vcvarsall bat not found安装时matplotlib包 为此是否不可避免地安装 Visual Studio 不需要安装 Vi
  • JavaScript - 将对象文字作为第二个参数传递给 Object.create()

    参考下面的JavaScript代码片段 问题 为什么对象字面量 item value foobar 在分配给变量时 如第 1 行 与作为参数传递给 Object create 如第 5 行 时的行为不同 第 5 行和第 8 行有什么区别 即
  • 在 x86 asm 中输出变量值

    我正在用汇编语言编写一个程序 但它不起作用 因此我想在 x86 函数中输出变量 以确保这些值是我期望的值 有没有简单的方法来做到这一点 还是非常复杂 如果更简单的话 汇编函数是从 C 函数中使用的 并使用 gcc 进行编译 您的问题似乎是
  • 如何使Inno Setup页面的底部透明? (给出截图)

    我怎样才能制作一个像这样的 Inno Setup 安装程序 我的意思是 我想让 Inno Setup 页面的底部像上图一样 我应该使用什么 Pascal 编码 谢谢 最简单的方法是获取iswin7 dll来自互联网的库并使用以下代码使用它
  • 解析和 facebook sdk - 重复符号

    我的项目中有 parse facebook bolts 框架 但我收到此错误 但我不知道如何解决它 我尝试删除框架并再次添加它们 我正在使用 xcode 6 和解析库 1 6 duplicate symbol OBJC METACLASS
  • 始终获取依赖属性的 PropertyChangedCallback - Silverlight

    我有一个依赖属性和一个回调 public static readonly DependencyProperty IsBusyProperty DependencyProperty Register IsBusy typeof bool ty
  • byte[] 并通过引用有效传递

    因此 这与处理大对象堆并尝试最小化实例化 byte 的次数有关 基本上 我遇到了 OutOfMemoryExceptions 我觉得这是因为我们实例化了太多字节数组 当我们处理几个文件时 该程序运行良好 但它需要扩展 而目前还不能 简而言之