开源改变世界!!

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

推推 grbl 2年前 (2023-01-27) 223次浏览
关闭
高大进 开了这个issue 2020 年 2 月 21 日 · 14条评论
关闭

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常#887

高大进 开了这个issue 2020 年 2 月 21 日 · 14条评论

注释

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
高大神 评论了 2020 年 2 月 21 日  

所以我试图“矢量化”图像,每次尝试都会抛出这个错误:

“引发了‘System.OutOfMemoryExcption’类型的异常”

这对我的系统来说似乎不太可能。我使用 3900x 运行 64GB 内存;>_>

附件是两个屏幕截图,一个是使用的设置,另一个是错误本身。另一个是我正在使用的图像。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

编辑:忘记包括我试图用来创建的设置。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

同样在这里,我只有 4 gig 的 ram,所以我有点期待它。
这是一张非常详细的图像,文件很大,也许
LaserGRBL 可以处理的像素数量有限制。
您是否尝试过使用较小的文件大小,但我知道您只能在不丢失细节的情况下缩小文件大小。
在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
作者
高大神 评论了 2020 年 2 月 21 日  

您是否尝试过使用较小的文件大小,但我知道您只能在不丢失细节的情况下缩小文件大小。

有趣的….

所以我制作了几个较小的版本,只是想确定它失败的大小。
大小
100%:失败
95%:失败
94%:失败
93%:失败
92%:失败
91.9%:失败
91.8%:失败
91.7%:失败
91.6:通过
91%:通过
90%:通过
75%:通过
50% :合格
25%:合格

原始图像的 91.6% 的最大通道从 2292 x 3056(7,004,352 像素)缩小到 2099 x 2799(5,875,101 像素)。

耸耸肩

也许软件只调用了 32 位内存分配的限制?

编辑:我尝试再次运行 Pass 并记录 ram 使用情况,计算时它只有 2,545 MB。失败停止在 366 MB。所以有那个理论。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
所有者
阿尔基皮塔 评论了 2020 年 2 月 21 日  

即使您的机器具有大量总物理 RAM(通过交换磁盘创建的虚拟内存添加到其中),进程可用的内存量始终只是其中的一小部分。

代码可以创建的单个对象(例如位图)的大小也有限制。即使在 64 位上,CLR 对象的最大大小也是 2gb。

https://stackoverflow.com/questions/6107322/memory-limitations-in-a-64-bit-net-application
https://stackoverflow.com/questions/14186256/net-out-of-memory-exception-used -1-3gb-but-have-16gb-installed
https://stackoverflow.com/questions/200348/is-there-a-memory-limit-for-a-single-net-process

我曾经为“AnyCPU”编译 LaserGRBL,它应该生成一个可以在 32/64 位 cpu 上运行的可执行文件,并且操作系统为应用程序选择最佳模式。但是看起来它在 64 位 cpu 上也加载为 32 位

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

关于您的像素计算,问题要复杂得多。当 LaserGRBL 需要创建最终输出时,它将原始图像缩放到不同的分辨率。该分辨率以复杂的方式计算,只是为了保持可能的最大分辨率,但不超过内存限制(我以实验方式计算),并且不应取决于原始图像分辨率,而应仅取决于最终雕刻的“目标”尺寸。

int maxSize = Is32Bit ? 6000 * 7000 : 22000 * 22000; //on 32bit OS we have memory limit - allow Higher value on 64bit
double maxRes = Math.Sqrt((maxSize / (TargetSize.Width * TargetSize.Height))); //limit res if resultimg bmp size is to big
double res = Math.Min(maxRes, SelectedTool == ImageProcessor.Tool.Line2Line || SelectedTool == ImageProcessor.Tool.Dithering ? (double)Quality : 10.0); //use a fixed resolution of 10ppmm for vectorization
double fres = Math.Min(maxRes, FillingQuality);

Size pixelSize = new Size((int)(TargetSize.Width * res), (int)(TargetSize.Height * res));

最后,lasergrbl 在最终矢量化之前在图像副本之间执行多次传递(背景清洁、对比度和亮度的应用等)。也许这是此过程的累积效应。

我怀疑在以前版本的 lasergrbl 中,它是否能够处理更高的输出大小。
你想试试这个旧版本吗?https://github.com/arkypita/LaserGRBL/releases/tag/v2.8.21

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
所有者
阿尔基皮塔 评论了 2020 年 2 月 21 日  

编辑:我已经为你做了这个测试。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

较旧的 2.8.21 可以管理非常大的图像:最大 1.6mx 1.2m 甚至更大。
我改变了一些东西,破坏了一些东西。

最大的不同是现在操作系统将可执行文件加载为 32 位而不是 64 位。

我会让你知道。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887 arkypita 添加了 漏洞 标签 2020 年 2 月 21 日
在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
所有者

奇怪的是,降级到 2.8.21 后我重新安装了最新版本,现在它加载为 64 位应用程序。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
作者

我会试一试,看看我是否可以按照您对降级然后升级所做的操作将其作为 64 位应用程序加载。

感谢您的回复并花时间查看此内容

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
作者

是的,降级到 2.8.21 然后升级到 3.0.24 允许它在 64 位中运行。我保存了 g 代码并准备运行它;p

如果您需要我做更多测试,请告诉我。我在哪里可以给你买杯咖啡?

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
所有者

这个问题很奇怪,似乎更像是 Windows 问题而不是 LaserGRBL 问题。
如果不是 LaserGRBL 本身的可执行文件,降级升级过程不应该改变任何东西。

LaserGRBL.exe 是使用“ AnyCPU ”标志编译的可执行文件,允许它在 32 位和 64 位机器/操作系统上运行。操作系统选择最佳模式。

由于某些我不知道的原因,Windows 可能会决定将使用标志“AnyCPU”编译的可执行文件作为 32 位可执行文件运行,即使在 64 位机器上也是如此。

如果您需要我做更多测试,请告诉我。

只有一个信息:您的 windows 版本是什么?(Win10?Win7?)

我在哪里可以给你买杯咖啡?

如果你喜欢这个软件并且你想贡献你可以通过捐赠给我一杯咖啡:https ://www.paypal.com/pools/c/8cQ1Lo4sRA

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

嗨 Arkypita。
我有一台 64 位机器,安装了 4 gig ram 和 Windows 7 Pro。

我尝试了您提到的降级-升级选项,但 LaserGRBL 仍然安装到程序文件 (x86) 中,而不是安装了我的其他 64 位程序的程序文件中。所以我假设它仍在 32 位模式下运行。

我只是想知道是否需要将它从我的系统中完全删除才能使其以 64 位模式运行。正如您从任务管理器的图像中看到的那样,它并没有说明它在运行时处于哪种模式。
在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
所有者
阿尔基皮塔 评论了 2020 年 2 月 26 日  

同样在这里,我只有 4 gig 的 ram,所以我有点期待它。

实际安装的 RAM 内存量与程序可以分配的内存量无关。操作系统为程序提供虚拟内存寻址,由于硬盘上的交换文件,使得可用内存量大得多。

根据微软文档,每个 32 位应用程序的地址空间为 2GB,而每个 64 位应用程序的地址空间为 8TB。

这使得 LaserGRBL 在 x86(32 位)系统上受到更多限制。

LaserGRBL 仍然安装到程序文件 (x86) 中,而不是安装我的其他 64 位程序的程序文件中。

我读过一些文章,安装文件夹在操作系统加载可执行文件的方式中并不重要。这与我的信念一致。

我在记录器文件(? -> 打开会话日志)中添加了一个诊断程序,显示应用程序运行的是 32 位还是 64 位。

您现在可以阅读:

------- LaserGRBL v3.1.2 [64bit] START -------

在方括号之间,您可以阅读:

  • 64bit: 以 6​​4 位模式运行(一切正常)
  • 32bit: 以 32 位模式运行,因为操作系统和/或 CPU 是 32 位的(都很好,只有一台旧计算机)
  • 32bit!: 以 32 位运行,但 LaserGRBL 检测到我们在 64 位操作系统上(问题!)。

@StuartB4您可以在会话日志中看到什么?

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
所有者
阿尔基皮塔 评论了 2020 年 2 月 26 日  

正如您从任务管理器的图像中看到的那样,它并没有说明它在运行时处于哪种模式。

您可以右键单击表头并添加“平台”列。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887

嗨 Arkypita。

您可以右键单击表头并添加“平台”列。

我在 Windows 7 的任务管理器中似乎没有该选项。

但它似乎在 64 位模式下运行,所以没关系。
会话日志显示了它。

2/26/2020 17:20:08 程序 —— LaserGRBL v3.1.2 [64bit] START ——
2/26/2020 17:20:11 SetStatus 机器状态 [断开连接]
2 /26/2020 17:20:16 SetStatus 机器状态 [连接]
2/26/2020 17:20:16 OpenCom 打开 COM8 @ 115200 波特 Ctrl-X
2/26/2020 17:20:16 SendImmediate 立即发送命令 [0x18 ]
2/26/2020 17:20:16 VersionInfo 检测到 Grbl v1.1h
2/26/2020 17:20:16 SetStatus 机器状态 [空闲]

非常感谢。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
作者

问候 我一直在度假。

这是我用于制作 g 代码
Ryzen 3900x
64GB ram
RTX 2080ti
Windows 10 Pro 版本 1809 (17763.1039)
2x SSD 的 1xNVMe 1xHDD
大量 USB 东西的系统。

在具有 64GB RAM 的系统中抛出了“System.OutOfMemoryExcption”类型的异常 #887
所有者

一块很棒的硅!

我问是因为我正在寻找操作系统版本与此问题之间是否存在关联,但我认为没有。更有可能它取决于系统决定加载的某些 32 位库,这会强制整个应用程序以 32 位加载

看来问题很有限,也许你是少数遇到过并报告过的人之一。

我会保持监控。
祝你今天过得愉快