内存不足,无法继续执行 C# WPF 程序

编程


项目:我在连接到 SQL Server 数据库的 MS Access ADP 2003 项目中制作了会计项目,因为不可能在 Access 中创建带有动画的漂亮且现代的用户界面,我决定重写我的程序,我想转换该项目对于一个能够拥有快速程序并具有带有动画的漂亮 UI 的项目,以及用户能够将整个应用程序的主题更改为深色或浅色的功能,所以我说 C# WPF。

项目信息:带有 .NET Framework 4.7.2 的 C# WPF,我还使用 Material Design 为整个应用程序设置深色/浅色主题

操作系统:Windows 10 x64,配备 8GB RAM

代码:发票窗口 ↓

XAML: XAML

C# : 夏普

我的项目有非常高的 RAM 消耗,但现在我的项目很大,在我的 MainWindow 中,当我想加载一个窗口时,出现以下错误:

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            new HEAD_LST_FROOSH22().Show();
        }
Error:

System.OutOfMemoryException: 'Insufficient memory to continue the execution of the program.

我尝试过的:

我试图提供检查此错误所需的所有数据,这是一个一般错误,没有人可以用摘要代码进行评论。 我不期望任何人阅读整个代码,但有人可以一眼就给出意见或线索。

谢谢大家

更新 :

我创建了一个小型 C# WPF 来测试 UI,因为我被怀疑“材料设计”

所以这里是:

截屏

解决方案1

很难用如此少的信息来说什么……但是:
Win10 的 8 GB RAM 并不是很多内存,因为 Windwos 本身占用了 5 GB 的内存。
现在这取决于您的应用程序剩余内存会发生什么以及是否足够……

解决方案2

引用:

内存不足,无法继续执行 C# WPF 程序

你几乎没有给我们提供足够的信息来进行疯狂的猜测,但足以提供合理的解决方案。
唯一明智的做法是在 12GB 或 16GB 的 PC 上尝试一下,看看问题是否仍然出现。

W10 占用内存很大,而你要在其中塞满反恶意软件,8GB 足够 W10、反恶意软件和其他东西可能是完全正常的,但留给用户应用程序的空间就所剩无几了。

否则,该问题是未掌握的递归代码的典型问题。

如果不亲自操作您的电脑并进行测量来了解内存消耗情况及其运作方式,那么就无法提供帮助。 这种活动通常适合专业人士,并且由于花费时间而昂贵。

解决方案3

添加到拉尔夫和帕特里斯所说的…您显示的代码可能导致该错误消息的唯一方法是如果此代码

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            new HEAD_LST_FROOSH22().Show();
        }

是的一部分 HEAD_LST_FROOSH22 类,或 HEAD_LST_FROOSH22 class 创建当前类的实例,结果是无界递归。

让我尝试解释一下什么是“无界递归”:在现实世界中,你有一份工作要做——泡一杯茶。 但为了泡一杯茶,你必须烧水,而拥有水壶的人只有在你给他们……一杯茶时才会让你喝。
因为你需要一个水壶来泡一杯茶才能得到一个水壶来泡一杯茶,你永远无法完成任务。

在计算中,也会发生同样的事情:方法 A 调用自身(直接递归)
或者它调用方法 B,方法 B 又调用方法 A(间接递归)。 因为每次调用一个方法时,它都会使用应用程序堆栈上的空间,因此您很快就会耗尽整个堆栈,并收到“内存不足”错误。 堆栈非常小 – 只有 1MB – 因此很容易超出这个范围。

因此,首先查看“整个代码”,并找出包含该代码的调用与 HEAD_LST_FROOSH22 类是。

コメント

タイトルとURLをコピーしました