سؤال

أنا أستخدم أمرًا محددًا في كود C# الخاص بي، والذي يعمل بشكل جيد.ومع ذلك، يقال أنه يسيء التصرف في التعليمات البرمجية "غير المُدارة".

ما هو الكود المُدار أو غير المُدار؟

هل كانت مفيدة؟

المحلول

هنا بعض النص من MSDN حول رمز غير مُدار.

تحتاج بعض أكواد المكتبة إلى استدعاء تعليمات برمجية غير مُدارة (على سبيل المثال، واجهات برمجة تطبيقات التعليمات البرمجية الأصلية، مثل Win32).لأن هذا يعني الخروج عن محيط الأمان للتعليمات البرمجية المُدارة، يلزم الحذر الواجب.

فيما يلي بعض التوضيحات المجانية الأخرى حول التعليمات البرمجية المُدارة:

  • الكود الذي يتم تنفيذه بواسطة CLR.
  • تُعرف التعليمات البرمجية التي تستهدف وقت تشغيل اللغة العامة، وهو أساس .NET Framework، باسم التعليمات البرمجية المُدارة.
  • توفر التعليمات البرمجية المُدارة البيانات الوصفية اللازمة لـ CLR لتوفير خدمات مثل إدارة الذاكرة، والتكامل عبر اللغات، وأمن الوصول إلى التعليمات البرمجية، والتحكم التلقائي في الكائنات مدى الحياة.يتم تنفيذ جميع التعليمات البرمجية المستندة إلى IL كرمز مُدار.
  • التعليمات البرمجية التي يتم تنفيذها ضمن بيئة تنفيذ CLI.

لمشكلتك:

أعتقد أن السبب في ذلك هو أن NUnit تنفذ التعليمات البرمجية الخاصة بك لـ UnitTesting وقد تحتوي على جزء منها غير مُدار.لكنني لست متأكدا من ذلك، لذلك لا تأخذ هذا مقابل الذهب.أنا متأكد من أن شخصًا ما سيكون قادرًا على إعطائك المزيد من المعلومات حول هذا الموضوع.نأمل أن يساعد!

نصائح أخرى

هذا هو مقال جيد حول هذا الموضوع.

كي تختصر،

  1. كود مُدار لا يتم تجميعه إلى رمز الجهاز ولكن إلى لغة وسيطة يتم تفسيرها وتنفيذها بواسطة بعض الخدمات على الجهاز وبالتالي فهي تعمل ضمن إطار عمل آمن (نأمل!) يتعامل مع أشياء خطيرة مثل الذاكرة والخيوط بالنسبة لك.في الاستخدام الحديث، يعني هذا في كثير من الأحيان .NET ولكن ليس من الضروري ذلك.

برنامج تطبيق يتم تنفيذه ضمن مشغل وقت تشغيل مثبتة في نفس الجهاز.لا يمكن تشغيل التطبيق بدونه.توفر بيئة وقت التشغيل المكتبة العامة للبرامج الإجراءات التي يستخدمها البرنامج ويقوم عادة بتنفيذها الذاكرة إدارة.قد يوفر أيضا التحويل في الوقت المناسب (JIT) من شفرة المصدر إلى التعليمات البرمجية القابلة للتنفيذ أو من لغة وسيطة إلى رمز قابل للتنفيذ.جافا ، فيجوال بيسك و . وقت تشغيل اللغة المشتركة ل NET (CLR) هي أمثلة على محركات وقت التشغيل.(اقرأ أكثر)

  1. رمز غير مُدار يتم تجميعه إلى رمز الجهاز وبالتالي يتم تنفيذه بواسطة نظام التشغيل مباشرة.وبالتالي، فهو يتمتع بالقدرة على القيام بأشياء ضارة/قوية لا تمتلكها التعليمات البرمجية المُدارة.هذه هي الطريقة التي كان يعمل بها كل شيء، لذلك عادةً ما يكون مرتبطًا بالأشياء القديمة مثل ملفات .dll.

برنامج قابل للتنفيذ يعمل من تلقاء نفسه.تم إطلاقه من التشغيل النظام ، يستدعي البرنامج ويستخدم إجراءات البرنامج في نظام التشغيل ، ولكن لا يتطلب نظام برمجي آخر ليكون مستعمل.برامج لغة التجميع التي تم تجميعها في الجهاز برامج اللغة و C / C المجمعة في لغة الآلة ل منصة معينة هي أمثلة على التعليمات البرمجية غير المدارة. (اقرأ أكثر)

  1. محلي غالبًا ما يكون الرمز مرادفًا لـ Unmanaged، ولكنه ليس متطابقًا.

عندما تفكر في غير مُدار, ، فكر في التعليمات البرمجية الخاصة بالجهاز وعلى مستوى الجهاز.مثل لغة التجميع x86.يتم تجميع التعليمات البرمجية (الأصلية) غير المُدارة وربطها لتعمل مباشرة على المعالج الذي تم تصميمها من أجله، باستثناء جميع عناصر نظام التشغيل في الوقت الحالي.إنها ليست محمولة، ولكنها سريعة.رمز بسيط جدًا، تم تجريده.

تمكنت الكود هو كل شيء بدءًا من Java وحتى Interpretive BASIC القديم، أو أي شيء يعمل ضمن .NET.عادةً ما يتم تجميع التعليمات البرمجية المُدارة إلى مستوى P-Code متوسط ​​المستوى أو مجموعة من التعليمات البرمجية بايت.هذه ليست تعليمات خاصة بالجهاز، على الرغم من أنها تبدو مشابهة للغة التجميع.تعمل التعليمات البرمجية المُدارة على عزل البرنامج عن الجهاز الذي يعمل عليه، وإنشاء حدود آمنة يتم فيها تخصيص كل الذاكرة بشكل غير مباشر، وبشكل عام، ليس لديك وصول مباشر إلى موارد الجهاز مثل المنافذ، ومساحة عنوان الذاكرة، والمكدس، وما إلى ذلك .الفكرة هي العمل في بيئة أكثر أمانًا.

للتحويل من متغير مُدار، على سبيل المثال، إلى متغير غير مُدار، عليك الوصول إلى الكائن الفعلي نفسه.من المحتمل أن تكون ملفوفة أو معبأة في بعض العبوات الإضافية.المتغيرات غير المُدارة (مثل "int"، على سبيل المثال) - على جهاز 32 بت - تستغرق 4 بايت بالضبط.لا يوجد أي تعبئة علوية أو إضافية.تسمى عملية الانتقال من التعليمات البرمجية المُدارة إلى التعليمات البرمجية غير المُدارة - والعودة مرة أخرى - "تنظيم".يسمح لبرامجك بعبور الحدود.

بأقل عدد ممكن من الكلمات:

  • التعليمات البرمجية المُدارة = برامج .NET
  • التعليمات البرمجية غير المُدارة = البرامج "العادية".

والتعليمات البرمجية غير المدارة في الأساس هو رمز التي لا تعمل تحت CLR. NET (ويعرف أيضا باسم لا VB.NET، C #، الخ). تخميني هو أن NUnit لديه عداء / المجمع الذي هو ليس رمز. NET (ويعرف أيضا باسم C ++).

<اقتباس فقرة>   

والتعليمات البرمجية المدارة:
  التعليمات البرمجية التي تدير بموجب "عقد التعاون" مع   وقت تشغيل اللغة العامة. التعليمات البرمجية المدارة يجب توفير البيانات الوصفية   الخدمات الضرورية لوقت التشغيل لتوفير مثل الذاكرة   إدارة والتكامل عبر اللغة، رمز الحماية وصول، و   مراقبة مدى الحياة التلقائي من الكائنات. كل رمز تستند إلى Microsoft   اللغة المتوسطة (MSIL) ينفذ كما التعليمات البرمجية المدارة.

     

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

والمرجعي: HTTP: // شبكة الاتصالات العالمية. dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx

تقوم NUnit بتحميل اختبارات الوحدة في AppDomain منفصل، وأفترض أنه لم يتم استدعاء نقطة الإدخال (ربما ليست هناك حاجة إليها)، وبالتالي فإن تجميع الإدخال فارغ.

تمكنت الكود هو ما ينشئه المترجمون C#.Net وVB.Net وF#.Net وما إلى ذلك.إنه يعمل على CLR، والذي يقدم، من بين أمور أخرى، خدمات مثل جمع البيانات المهملة، والتحقق من المراجع، وأكثر من ذلك بكثير. لذا فكر في الأمر على أنه تتم إدارة الكود الخاص بي بواسطة CLR.

على الجانب الآخر، غير مُدار يتم تجميع الكود مباشرة إلى كود الآلة.لا يتم إدارته بواسطة CLR.

والتعليمات البرمجية المدارة يعمل داخل بيئة CLR أي صافي runtime.In قصيرة عن IL تدار code.But إذا كنت تستخدم بعض طرف ثالث مثل برنامج VB6 أو مكون VC ++ هم لم يقم التعليمات البرمجية غير المدارة كما وقت التشغيل .NET (CLR) السيطرة على تنفيذ التعليمات البرمجية المصدر للغة.

والتعليمات البرمجية المدارة: - كود الذي يتم تطوير MSIL (لغة وسيطة) النموذج بعد تجميع مترجم اللغة وتنفذ مباشرة من قبل CLR دعا التعليمات البرمجية المدارة. على سبيل المثال: - كل رمز 61 لغة معتمدة من قبل برنامج .NET Framework

والتعليمات البرمجية غير المدارة: - التعليمات البرمجية التي وضعت قبل .net الذي شكل MSIL غير متوفر ويتم تنفيذ ذلك من قبل CLR مباشرة بدلا سوف CLR إعادة توجيه إلى نظام التشغيل هذا هو المعروف باسم التعليمات البرمجية غير المدارة

وعلى سبيل المثال: -com، واجهات برمجة التطبيقات Win32 و

  • تمكنت شفرة:كود مكتوب بلغة .NET مثل C#، VB.NET.
  • غير مُدار شفرة:رمز غير مكتوب بلغة .NET و MSIL يفعل لا أفهم ما هو عليه ولا يمكن تشغيله تحت CLR ؛مثل عناصر التحكم التابعة لجهات خارجية التي استخدمناها في تطبيقات .NET الخاصة بنا والتي لم يتم إنشاؤها بلغات .NET.

بادئ ذي بدء، فهم هذا، من قبل .NET framework, Microsoft تم توفير المنتجات المستقلة مثل MFC (Visual C++), VB, FoxPro إلخ.

في عام 2002، قامت Microsoft بدمج منتجاتها وصنعت إطار عمل .NET.يوجد الآن فرق بين كيفية تنفيذ التعليمات البرمجية من قبل وكيفية إدارة التعليمات البرمجية وتنفيذها في إطار عمل .NET.قدمت مايكروسوفت مفهوم CLR مع .NET Framework الذي يجمع التعليمات البرمجية القادمة من أي لغة مدعومة من .NET Framework ويوفر وظائف إضافية مثل memory mangement, garbage collection إلخ.لكن ميزات CLR هذه لم تكن متاحة مباشرة من قبل.

لذلك إذا كنت تقوم بإنشاء مكتبة / رمز في إطار عمل .NET (تم تجميعه باستخدام CLR) ثم يسمى ذلك Managed code.يمكنك استخدام هذه المكتبة علاوة على ذلك في تطبيق / مشروع .NET آخر ، وهناك أيضا ، سيقوم CLR افهم كيف تم تجميعها من قبل ، ولهذا السبب تظل إدارة التعليمات البرمجية.

OTOH، إذا كنت تريد استخدام المكتبات التي تمت كتابتها قبل .NET Framework، فيمكنك فعل ذلك مع بعض القيود، ولكن تذكر، نظرًا لأن CLR لم يكن موجودًا في ذلك الوقت، فلن يتمكن CLR الآن من فهم هذا الرمز وتجميعه مرة أخرى .وسيتم استدعاء هذا unmanaged code.يرجى ملاحظة أن المكتبات/التجميعات التي أنشأها طرف ثالث لتوفير ميزات/أدوات معينة قد يتم اعتبارها أيضًا تعليمات برمجية غير قابلة للإدارة إذا لم تكن متوافقة مع CLR.

في المصطلحات العلمانية، إدارة التعليمات البرمجية هو شيء يفهمه CLR الخاص بك ويمكنه تجميعه بمفرده لمزيد من التنفيذ.في .NET Framework، (من أي لغة تعمل على .NET Framework) عندما ينتقل الكود إلى CLR، يقوم الكود بتوفير بعض معلومات بيانات التعريف، حتى يتمكن CLR من توفير الميزات المحددة لك هنا.قليل منهم Garbage collection, Performance improvements, cross-language integration, memory management إلخ.

أوتوه، رمز غير مُدار هو شيء خاص بالجهاز وجاهز للاستخدام، ولا حاجة إلى معالجته بشكل أكبر.

من Pro C# 5 و.NET 4.5 Framework:

مدارة مقابل.التعليمات البرمجية غير المُدارة: ربما تكون النقطة الأكثر أهمية التي يجب فهمها حول لغة C # هي أنها يمكن أن تنتج رمزا يمكن التنفيذ فقط خلال وقت تشغيل .NET (لا يمكنك أبدا استخدام C # لإنشاء خادم COM أصلي أو ملف تطبيق C / C غير المدار).من الناحية الرسمية ، فإن المصطلح المستخدم لوصف الكود الذي يستهدف وقت تشغيل .NET هو رمز مدار.تسمى الوحدة الثنائية التي تحتوي على التعليمات البرمجية المدارة تجميعا (مزيد من التفاصيل حول التجميعات في القليل فقط).على العكس من ذلك ، التعليمات البرمجية التي لا يمكن استضافتها مباشرة بواسطة .NET يطلق على وقت التشغيل تعليمات برمجية غير مدارة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top