الذاكرة غير كافية لمتابعة تنفيذ البرنامج لـ C# WPF


مشروع: لقد قمت بإنشاء مشروع محاسبة في مشروع MS Access ADP 2003 الذي يتصل بقاعدة بيانات SQL Server، لأنه ليس من الممكن إنشاء واجهة مستخدم جميلة وحديثة مع الرسوم المتحركة في Access، قررت إعادة كتابة برنامجي، أريد تحويل هذا المشروع إلى مشروع لتكون قادرًا على الحصول على برنامج سريع السرعة والحصول على واجهة مستخدم جميلة مع الرسوم المتحركة والميزة التي تمكن المستخدم من تغيير سمة التطبيق بالكامل إلى Dark أو Light لذلك ذكرت C# WPF.

معلومات المشروع: C# WPF مع .NET Framework 4.7.2، كما استخدمت تصميم المواد لتعيين سمة داكنة/فاتحة للتطبيق بالكامل

نظام التشغيل: ويندوز 10 x64 مع 8 جيجا رام

الرموز: نافذة الفاتورة ↓

XAML: XAML

ج # : CSHARP

يستهلك مشروعي نسبة عالية جدًا من ذاكرة الوصول العشوائي (RAM)، ولكن الآن بعد أن أصبح مشروعي كبيرًا، في النافذة الرئيسية الخاصة بي، عندما أرغب في تحميل نافذة، أتلقى الخطأ التالي:

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 صغير لاختبار واجهة المستخدم لأنه كان يشتبه في “تصميم المواد”

حتى هنا هو عليه :

لقطة شاشة

الحل 1

من الصعب أن نقول شيئًا بهذه المعلومات الأقل … لكن:
لا تعد ذاكرة الوصول العشوائي بسعة 8 جيجابايت مع نظام التشغيل Win10 الكثير من الذاكرة لأن Windwos نفسه يستهلك ما يصل إلى 5 جيجابايت خاصًا به.
الآن يعتمد الأمر على التطبيق الخاص بك وما يحدث مع بقية الذاكرة وما إذا كان ذلك كافيًا …

الحل 2

يقتبس:

الذاكرة غير كافية لمتابعة تنفيذ البرنامج لـ C# WPF

بالكاد قدمت لنا معلومات كافية للتخمينات الجامحة، ولكنها كافية للحلول المعقولة.
الشيء الوحيد المعقول الذي يجب فعله هو تجربة جهاز كمبيوتر بسعة 12 جيجابايت أو 16 جيجابايت لمعرفة ما إذا كانت المشاكل لا تزال قائمة.

W10 متعطش للذاكرة، وعليك ملئه ببرامج مكافحة البرامج الضارة، قد يكون من الطبيعي تمامًا أن تكون 8 جيجابايت كافية لـ W10 ومكافحة البرامج الضارة وأشياء أخرى، ولكن لم يبق الكثير لتطبيقات المستخدم.

بخلاف ذلك، تكون المشكلة نموذجية في التعليمات البرمجية العودية غير المتقنة.

دون وضع يدك على جهاز الكمبيوتر الخاص بك وإجراء قياسات لفهم ما يستهلك الذاكرة وكيف يعمل، فمن المستحيل المساعدة. T6هذا النوع من النشاط مخصص بشكل عام للمحترفين وهو مكلف بسبب الوقت الذي يقضيه.

الحل 3

للإضافة إلى ما قاله رالف وباتريس … الطريقة الوحيدة التي قد يتسبب بها الرمز الذي تعرضه في ظهور رسالة الخطأ هذه هي إذا كان هذا الرمز

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

جزء من HEAD_LST_FROOSH22 الطبقة، أو HEAD_LST_FROOSH22 يقوم class بإنشاء مثيل للفئة الحالية وتكون النتيجة العودية غير المحدودة.

اسمحوا لي أن أحاول أن أشرح ما هو “العودة غير المحدودة”: في العالم الحقيقي، لديك وظيفة للقيام بها – إعداد كوب من الشاي. ولكن لكي تحضر كوبًا من الشاي، عليك أن تغلي الماء، ولن يسمح لك الشخص الذي يمتلك الغلاية بالحصول عليه إلا عندما تعطيه … كوبًا من الشاي.
نظرًا لأنك تحتاج إلى غلاية لتحضير كوب من الشاي حتى تتمكن من الحصول على غلاية لتحضير كوب من الشاي، فلن تتمكن أبدًا من إنهاء المهمة.

في الحوسبة، يحدث الشيء نفسه: الطريقة A تستدعي نفسها (العودة المباشرة)
أو يستدعي الطريقة B التي تستدعي الطريقة A (العودة غير المباشرة). لأنه في كل مرة تقوم فيها باستدعاء أسلوب ما، فإنه يستخدم مساحة على مكدس التطبيق، فإنك تستنفد المكدس بأكمله بسرعة كبيرة، وتحصل على خطأ “نفاد الذاكرة”. الأكوام صغيرة جدًا – 1 ميجابايت فقط – لذلك من السهل جدًا تجاوز ذلك.

لذا ابدأ بالنظر إلى “الرمز بأكمله” واكتشف العلاقة بين المكالمات التي تحتوي على هذا الرمز و HEAD_LST_FROOSH22 الطبقة هي.

コメント

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