هل هناك أي اعتبارات يجب أخذها في الاعتبار عند تشغيل برنامج .net الخاص بك على نظام x64 مقابل x86؟

StackOverflow https://stackoverflow.com/questions/145026

  •  02-07-2019
  •  | 
  •  

سؤال

أعتقد أن نوع البنية (x86 vs x64) يتم استبعاده عنك عند إنشاء برامج .Net، ولكن هل هناك أي اعتبارات أخرى يمكن أن تسبب مشاكل؟

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

المحلول

احذر من مكتبات COM التابعة لجهات خارجية أو مكتبات .NET التابعة لجهات خارجية والتي تقوم بإجراء مكالمات win32 سرًا.هذا هو المكان الذي واجهنا فيه أكبر الصداع.

نصائح أخرى

من وثيقة MSDN, ، من بين اعتبارات أخرى:

في العديد من الحالات، سيتم تشغيل التجميعات بنفس الطريقة على CLR 32 بت أو 64 بت.تتضمن بعض الأسباب التي تجعل البرنامج يتصرف بشكل مختلف عند تشغيله بواسطة CLR 64 بت ما يلي:

  • الهياكل التي تحتوي على أعضاء يغيرون الحجم اعتمادًا على النظام الأساسي ، مثل أي نوع مؤشر.

  • مؤشر الحساب الذي يتضمن أحجام ثابتة.

  • تعرض النظام الأساسي غير الصحيح أو الإعلانات التي تستخدم int32 للمقابض بدلاً من IntPtr.

  • صب IntPtr إلى Int32

بالإضافة إلى مواقع الملفات الافتراضية.

تحتوي هذه المقالة على الكثير من المشكلات الجيدة التي يجب الانتباه إليها:http://osnews.com/story/20330/Windows_x64_Watch_List

شخصيًا، يمتلك مديري جهاز كمبيوتر يعمل بنظام Vista 64 بت، وأنا أقوم بالبرمجة في وضع 32 بت.لقد واجهنا المشكلات التالية:

  • يتم إخفاء التسجيل لتطبيقات 32 بت (نوعًا ما) في مجلد Wow6432Node.لن تكون جميع التطبيقات التي اعتدت عليها للعثور على مسار في السجل موجودة في تلك العقدة (على سبيل المثال، لن يكون SQL Server كذلك).

  • يمكن أن يتسبب SysWow64 في المجلد C:\Windows في حدوث مشكلات تتعلق بعدم وجود ملفات DLL في المكان المطلوب (كانت لدينا هذه المشكلة مع مكون ترخيص جهة خارجية).

  • في بعض الأحيان تكون الملفات التي تحتاجها موجودة في "C:\Program Files (x86)" بدلاً من "C:\Program Files".تمتص أيضا.

  • القراءة والكتابة بقيم 64 بت ليست آمنة على نظام أساسي 32 بت.تتطلب قراءة قيمة 64 بت عمليتين يمكن مقاطعتهما بواسطة تبديل السياق.راجع مقالة MSDN على خيوط.متشابكة.قراءة للمزيد من المعلومات.

  • كما أتفق تماما مع torialإجابات! :-)

قامت MSDN بوضع ورقة صغيرة بخصوص مشكلات نقل تطبيقات 32 بت إلى بيئة تنفيذ 64 بت.

http://msdn.microsoft.com/en-us/library/ms973190.aspx

سبق أن كتب مدونان آخران عن تطوير 64 بت عندما كانا يعملان في فريق CLR

سيسمح لك x64 بمعالجة المزيد من الذاكرة، ولكن بالنظر إلى نفس الرمز، فإنه سيستخدم ذاكرة أكبر من x86.

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

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

تحياتي ماسيمو

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