Không đủ bộ nhớ để tiếp tục thực thi chương trình cho C# WPF

lập trình


Dự án: Tôi có dự án Kế toán được thực hiện trong dự án MS Access ADP 2003 kết nối với cơ sở dữ liệu SQL Server. Vì không thể tạo giao diện người dùng đẹp và hiện đại với hoạt ảnh trong Access nên tôi quyết định viết lại chương trình của mình, tôi muốn Chuyển đổi dự án đó đối với một dự án để có thể có chương trình tốc độ nhanh và có giao diện người dùng đẹp mắt với hình ảnh động và tính năng mà người dùng có thể thay đổi chủ đề của Toàn bộ ứng dụng thành Tối hoặc Sáng, vì vậy tôi đã nêu C# WPF.

Thông tin dự án: C# WPF với .NET Framework 4.7.2, tôi cũng đã sử dụng Material Design để đặt Chủ đề Tối/Sáng cho TOÀN BỘ ứng dụng

hệ điều hành: Windows 10 x64 với RAM 8GB

Mã: Cửa sổ hóa đơn ↓

XAML: XAML

C# : CSHARP

Dự án của tôi tiêu thụ RAM rất cao, nhưng bây giờ dự án của tôi lớn,Trong MainWindow khi tôi muốn tải một cửa sổ, tôi gặp lỗi sau:

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.

Những gì tôi đã thử:

Tôi đã cố gắng cung cấp tất cả dữ liệu cần thiết để kiểm tra lỗi này, đây là lỗi chung và không ai có thể nhận xét bằng mã tóm tắt. Tôi không mong đợi bất cứ ai đọc toàn bộ mã, nhưng ai đó có thể đưa ra ý kiến ​​hoặc manh mối chỉ qua một cái nhìn.

cảm ơn tất cả

Cập nhật :

Tôi tạo một C# WPF nhỏ để kiểm tra giao diện người dùng vì tôi bị nghi ngờ là “Thiết kế Vật liệu”

vậy nó đây:

ảnh chụp màn hình

Giải pháp 1

Thật khó để nói điều gì đó với ít Thông tin này … nhưng:
Ram 8 GB với Win10 không phải là nhiều Bộ nhớ vì bản thân Windwos cũng chiếm tới 5 GB cho riêng nó.
Bây giờ, điều gì sẽ xảy ra với phần còn lại của Bộ nhớ tùy thuộc vào Ứng dụng của bạn và liệu nó có đủ …

Giải pháp 2

Trích dẫn:

Không đủ bộ nhớ để tiếp tục thực thi chương trình cho C# WPF

Bạn hầu như không cung cấp cho chúng tôi đủ thông tin để phỏng đoán nhưng cũng đủ để đưa ra các giải pháp hợp lý.
Điều hợp lý duy nhất cần làm là thử trên PC có 12 GB hoặc 16 GB để xem vấn đề có còn phát sinh không.

W10 ngốn bộ nhớ và bạn nhét nó vào phần mềm chống phần mềm độc hại, có thể hoàn toàn bình thường khi 8GB là đủ cho W10, phần mềm chống phần mềm độc hại và các nội dung khác, nhưng không còn nhiều cho các ứng dụng của người dùng.

Mặt khác, vấn đề là điển hình của mã đệ quy chưa được quản lý.

Nếu không đặt tay lên PC và thực hiện các phép đo để hiểu bộ nhớ tiêu thụ những gì và hoạt động như thế nào thì không thể giúp được. T6Loại hoạt động này thường dành cho các chuyên gia và tốn kém vì tốn thời gian.

Giải pháp 3

Để thêm vào những gì Ralf và Patrice đã nói … Cách duy nhất mà mã bạn hiển thị có thể gây ra thông báo lỗi đó là nếu mã này

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

Là một phần của HEAD_LST_FROOSH22 lớp học hoặc HEAD_LST_FROOSH22 class tạo một thể hiện của lớp hiện tại và kết quả là đệ quy không giới hạn.

Hãy để tôi giải thích “đệ quy không giới hạn” là gì: trong thế giới thực, bạn có một công việc phải làm – pha một tách trà. Nhưng để pha một tách trà, bạn phải đun sôi nước, và người sở hữu chiếc ấm sẽ chỉ cho bạn uống khi bạn đưa cho họ… một tách trà.
Bởi vì bạn cần một ấm đun nước để pha một tách trà để có được một ấm đun nước pha một tách trà, bạn không bao giờ có thể hoàn thành nhiệm vụ.

Trong điện toán, điều tương tự cũng xảy ra: phương thức A gọi chính nó (đệ quy trực tiếp)
hoặc nó gọi phương thức B gọi phương thức A (đệ quy gián tiếp). Bởi vì mỗi lần bạn gọi một phương thức, nó sẽ sử dụng không gian trên ngăn xếp ứng dụng, bạn sẽ nhanh chóng làm cạn kiệt toàn bộ ngăn xếp và bạn gặp lỗi “hết bộ nhớ”. Các ngăn xếp khá nhỏ – chỉ 1 MB – vì vậy rất dễ vượt quá mức đó.

Vì vậy, hãy bắt đầu bằng cách xem xét “toàn bộ mã” và tìm ra mối quan hệ giữa các lệnh gọi chứa mã đó và HEAD_LST_FROOSH22 lớp học là.

コメント

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