Memori tidak cukup untuk melanjutkan eksekusi program untuk C# WPF

pemrograman


Proyek: Saya memiliki proyek Akuntansi yang dibuat di proyek MS Access ADP 2003 yang terhubung ke database SQL Server, Karena tidak mungkin membuat antarmuka pengguna yang indah dan modern dengan animasi di Access, saya memutuskan untuk menulis ulang program saya, saya ingin mengonversi proyek itu ke sebuah proyek untuk dapat memiliki program berkecepatan tinggi dan memiliki UI yang indah dengan animasi dan fitur yang pengguna dapat mengubah tema seluruh aplikasi menjadi Gelap atau Terang, jadi saya menyatakan C# WPF.

Informasi proyek: C# WPF dengan .NET Framework 4.7.2, saya juga menggunakan Desain Material untuk mengatur Tema Gelap/Terang untuk SELURUH Aplikasi

sistem operasi: Windows 10 x64 dengan RAM 8GB

Kode: Jendela Faktur ↓

XAML: XAML

C# : CSHARP

Proyek saya memiliki konsumsi RAM yang sangat tinggi, tetapi sekarang proyek saya besar, di Jendela Utama saya ketika saya ingin memuat jendela, saya mendapatkan kesalahan berikut:

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.

Apa yang saya coba:

Saya mencoba memberikan semua data yang diperlukan untuk memeriksa kesalahan ini, ini adalah kesalahan umum dan tidak ada yang dapat berkomentar dengan kode ringkasan. Saya tidak mengharapkan siapa pun membaca keseluruhan kode, tetapi seseorang dapat memberikan pendapat atau petunjuk sekilas.

Terima kasih semuanya

Memperbarui :

Saya membuat C# WPF kecil untuk Menguji UI karena saya dicurigai “Desain Material”

jadi begini :

tangkapan layar

Solusi 1

Sulit untuk mengatakan sesuatu dengan informasi yang kurang ini… tetapi :
Ram 8 GB dengan Win10 bukanlah Memori yang banyak karena Windwos sendiri memakan waktu hingga 5 GB untuk miliknya sendiri.
Sekarang tergantung Aplikasi Anda apa yang terjadi dengan sisa Memori dan apakah itu cukup …

Solusi 2

Mengutip:

Memori tidak cukup untuk melanjutkan eksekusi program untuk C# WPF

Anda hampir tidak memberi kami cukup informasi untuk menebak-nebak, tetapi cukup untuk solusi yang masuk akal.
Satu-satunya hal yang masuk akal untuk dilakukan adalah mencoba pada PC dengan 12GB atau 16 GB untuk melihat apakah masalah masih muncul.

W10 haus memori, dan jika Anda mengisinya dengan anti-malware, mungkin normal jika 8GB cukup untuk W10, anti-malware, dan lainnya, namun tidak banyak yang tersisa untuk aplikasi pengguna.

Jika tidak, masalahnya adalah tipikal kode rekursif yang tidak dikuasai.

Tanpa menggunakan PC Anda dan melakukan pengukuran untuk memahami apa yang menghabiskan memori dan bagaimana cara kerjanya, mustahil untuk membantu. T6 Jenis kegiatan ini umumnya diperuntukkan bagi para profesional dan mahal karena waktu yang dihabiskan.

Solusi 3

Untuk menambah apa yang Ralf dan Patrice katakan … Satu-satunya cara agar kode yang Anda tampilkan dapat menyebabkan pesan kesalahan itu adalah jika kode ini

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

adalah bagian dari HEAD_LST_FROOSH22 kelas, atau HEAD_LST_FROOSH22 kelas membuat turunan dari kelas saat ini dan hasilnya adalah rekursi tak terbatas.

Izinkan saya mencoba menjelaskan apa itu “rekursi tak terbatas”: di dunia nyata, Anda memiliki tugas yang harus dilakukan – membuat secangkir teh. Namun untuk membuat secangkir teh, Anda harus merebus air, dan pemilik ketel hanya akan mengizinkan Anda meminumnya saat Anda memberi mereka … secangkir teh.
Karena Anda memerlukan ketel untuk membuat secangkir teh untuk mendapatkan ketel untuk membuat secangkir teh, Anda tidak akan pernah bisa menyelesaikan tugas tersebut.

Dalam komputasi, hal yang sama terjadi: metode A memanggil dirinya sendiri (rekursi langsung)
atau memanggil metode B yang memanggil metode A (rekursi tidak langsung). Karena setiap kali Anda memanggil suatu metode, metode tersebut menggunakan ruang pada tumpukan aplikasi, Anda dengan cepat menghabiskan seluruh tumpukan, dan Anda mendapatkan kesalahan “kehabisan memori”. Tumpukannya cukup kecil – hanya 1MB – jadi sangat mudah untuk melampauinya.

Jadi mulailah dengan melihat “keseluruhan kode” dan cari tahu apa hubungan antara panggilan yang berisi kode itu dan HEAD_LST_FROOSH22 kelas adalah.

コメント

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