我收到 OutOfMemoryExceptions,但我的跟踪文件比我的可用内存小得多
I'm getting OutOfMemoryExceptions, but my trace file is much smaller than my available memory
正如标题所说,我有大量可用内存,但在处理跟踪和调用数据源的属性时,我不断收到 OutOfMemoryExceptions。为什么会这样?
ETL文件格式设计得很space-efficient,还支持可选压缩。由于这些因素,从 .etl 文件中获取数据并将其转换为我们更有用的结构通常需要比文件的原始大小多得多的内存。但是,可以采取两个步骤来降低 OutOfMemoryExceptions 的可能性:
不要使用不需要的数据源。即使您的代码调用了数据源上的 none 个属性,只需通过调用其 Use 方法将其打开,就会导致数据源处理事件并准备数据以供使用。
确保您的程序运行宁作为 64 位进程。默认 Visual Studio C# 项目设置是针对 AnyCPU 编译您的程序,但更喜欢 运行 将其作为 32 位进程。在项目的构建属性中取消选中 "Prefer 32-bit" 选项或将项目的构建配置切换为 x64 将导致您的程序 运行 作为 64 位进程。
正如标题所说,我有大量可用内存,但在处理跟踪和调用数据源的属性时,我不断收到 OutOfMemoryExceptions。为什么会这样?
ETL文件格式设计得很space-efficient,还支持可选压缩。由于这些因素,从 .etl 文件中获取数据并将其转换为我们更有用的结构通常需要比文件的原始大小多得多的内存。但是,可以采取两个步骤来降低 OutOfMemoryExceptions 的可能性:
不要使用不需要的数据源。即使您的代码调用了数据源上的 none 个属性,只需通过调用其 Use 方法将其打开,就会导致数据源处理事件并准备数据以供使用。
确保您的程序运行宁作为 64 位进程。默认 Visual Studio C# 项目设置是针对 AnyCPU 编译您的程序,但更喜欢 运行 将其作为 32 位进程。在项目的构建属性中取消选中 "Prefer 32-bit" 选项或将项目的构建配置切换为 x64 将导致您的程序 运行 作为 64 位进程。