استثناء خارج الذاكرة في تطبيق مدار الذي يتم تشغيله على NET Framework 64 بت

هام: تمت ترجمة هذه المقالة باستخدام برامج مايكروسوفت للترجمة الآلية ومن المحتمل ان يتم تحريرها او تدقيقها بعد ذلك من خلال تكنولوجيا منصة مجموعات الترجمة(CTF) او من خلال مترجم بشري. تقدم لك شركة مايكروسوفت هذه المقالات المترجمة بشكل آلي او بالترجمة البشرية او بعد تحريرها وتدقيقها من قبل مجموعات الترجمة حتى تمكنكم من الوصول إلى جميع المقالات الموجودة في قواعد المعرفة لديها بلغات مختلفة. إلا أن المقالات المترجمة قد تحتوي على أخطاء في المفردات او بناء الجمل او النحو. وعليه، فإن شركة مايكروسوفت ليست مسؤولة عن اية أخطاء او عدم دقة في الترجمة او أية أضرار قد تحدث نتيجة أخطاء في ترجمة محتويات النص او استخدامه من قبل العملاء.

اضغط هنا لرابط المقالة باللغة الانجليزية3152158
الأعراض
لديك تطبيق تتم إدارته يستهدف 64 بت Microsoft net Framework 4.6.1. هذا التطبيق يطرح استثناء خارج الذاكرة من CLR بالرسالة المحددة التالية:

أووتوفميمورييكسسيبشن: "ذاكرة كافية في نطاق مساحة العنوان المحدد لمتابعة تنفيذ البرنامج."
السبب
يتم نشر هذا الاستثناء خارج الذاكرة قبل CLR عند إدارة التعليمات البرمجية النظام الفرعي لا يمكن تخصيص ذاكرة ضمن نطاق مساحة عنوان محدد للانتقال كعوب الروتين. (هذه الانتقال كعوب الروتين تتوافق مع طريقة استدعاء DLLs التي توجد من بين 2 غيغابايت أو أكثر عن بعضها البعض في مساحة العنوان.) يجب أن تكون مساحة قطرها 2 غيغابايت أسلوب الاستدعاء لتخزين كعب الانتقال لاستدعاء أسلوب 64 بت. لا توجد أية طريقة آمنة لأحد تطبيقات تدارك هذا الخطأ المحدد. حالة التطبيق بعد يواجه هذا الخطأ غير معروف لذلك، ويجب اعتبار تالفة. الطريقة الوحيدة لاسترداد إعادة تشغيل التطبيق.
الحل البديل
للتغلب على هذه المشكلة، استخدم إحدى الطرق الإعداد التالية:
  • تطبيق إعداد على مستوى الجهاز بإضافة مفتاح التسجيل التالي وقيمة:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

    نجينريسيرفيفورجومبستوبس= dword:00000005

  • تطبيق أحد إعدادات مستوى التطبيق بإضافة (أو دمج) المقطع التالي إلى ملف تكوين التطبيق الخاص بك:
    <configuration>    <runtime> <NGenReserveForJumpStubs value="5" />    </runtime></configuration>
توضيح: يؤدي نجينريسيرفيفورجومبستوبس الاحتفاظ بنسبة مئوية من مساحة العناوين للانتقال كعوب الروتين قرب كل صورة NGen تحميل CLR. نوصي باستخدام قيمة 5 أو أكبر إذا واجهت هذا الاستثناء أووتوفميموري.
معلومات أخرى

للمطورين

  • Net Framework بأسلوب ترميز المكالمات باعتبارها يقفز 32 بت النسبي لأسباب تتعلق بالأداء. على نظام تشغيل 64 بت، الطالب والمستدعى يمكن كذلك وبصرف النظر عن 2 غيغا بايت (في مساحة العنوان). لأن هذا يتجاوز نطاق العناوين الإزاحة 32 بت الموقعة، سينشئ. NET كعب روتين الانتقال داخل 2 غيغابايت للمستدعي. هذا الانتقال كعب روتين يمكن ثم جعل "الطويلة" الانتقال إلى أي مكان في مساحة العنوان 64 بت.
  • عوامل تخفيف مشاكل JIT ومنشئ الصورة الأصلية تعمل بشكل مختلف قليلاً. كل منهما حجز مساحة عنوان إضافي مقدما، ولكن النقطة حيث يتم إجراء الحجز هذا يختلف بين الاثنين.
  • نجينريسيرفيفورجومبستوبس عبارة عن نسبة مئوية من الظاهرية (حجم الصورة منشئ الصورة الأصليةبيرسينتريسيرفيفورجومبستوبس).
  • كعب روتين الانتقال نموذجي 12 بايت. لمزيد من المعلومات، راجع JUMP_ALLOCATE_SIZE.
  • تخصيص الذاكرة وحجز قريبة من العنوان الذي تم تحميل الصورة منشئ الصورة الأصلية (خوارزمية الدقيق EEJitManager::EnsureJumpStubReserve). تلتزم الذاكرة عندما تكون هناك حاجة لتخصيص كعب روتين الانتقال، وعند وجود مساحة عنوان مناسبة أخرى.
  • التخفيف السالفة الذكر لا تعديل محتوى الصور منشئ الصورة الأصلية. الصور منشئ الصورة الأصلية لها نفس حجم القرص مع و بدون التخفيف.
  • لا يوجد حاليا لا وسيلة جيدة للكشف عن التطبيق يتم الاقتراب من الحد الأقصى. يجب مراقبة أووتوفميمورييكسسيبشن تحديد ما إذا كانت المساحة المحجوزة كافية.
  • قد تظهر في أووتوفميمورييكسسيبشن حتى إذا كان هناك كثير من الذاكرة غير مستخدمة سبب هذا الخطأ المحدد مرتبط بتوافر ذاكرة قطرها نطاق عنوان 2 غيغابايت من الطالب.
  • لا يجب تغيير القيمة الافتراضية كوديهيبريسيرفيفورجومبستوبس، لأنه قد لا تتعلق بالمشكلة التي تم وصفها أعلاه. لم نر الحالة حيث سيكون التطبيق الفعلي لضبط هذا الإعداد كحل مؤقت.
  • قد يؤدي تعيين نجينريسيرفيفورجومبستوبس إلى قيمة أعلى بكثير للأداء المنخفض وخطر تعرض قضايا أخرى خفية.

لمستخدمي تكنولوجيا المعلومات

  • قد تحدث هذه المشكلة أيضا على إصدارات أخرى من NET Framework. ومع ذلك، الحل البديل حاليا قابلة للتطبيق فقط على 4.6.1 من NET Framework.
  • وهذه مسألة نادرة جداً إلا يؤثر على أعباء العمل الكبيرة جداً التي يكون نمط تنفيذ خاصة جداً. أكثر من 99 في المائة من كافة أحمال العمل سوف من أي وقت مضى أن تواجه هذه المشكلة.
  • بعد التطبيق يطرح استثناء أووتوفميموري، الطريقة المستحسنة فقط لاسترداد إعادة تشغيل التطبيق.

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 3152158 - آخر مراجعة: 05/10/2016 16:39:00 - المراجعة: 3.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbtshoot kbexpertiseinter kbmt KB3152158 KbMtar
تعليقات