سؤال

أحاول تنفيذ بعض المنطق على AppDomains متعددة بالتوازي. أقوم بذلك لأنني أعمل مع القانون القديم الذي هو "غير قابل للتغيير" وأريد تحسين الأداء من خلال توازي بعض الأشياء. المشكلة هي أنه إذا قمت بتشغيل مثيلات متعددة في حدود 1 AppDomain، فإنهم جميعا يعتمدون جميع هياكل البيانات الثابتة والتدخل مع بعضنا البعض.

تطبيقي بسيط. أريد تشغيل مثيلات متعددة من فئة "تنفيذ الإعدام" - كل منهم في Appdomain الخاص بهم - لذلك قمت بإنشاء فئة "executionharnessproxy: marshalbyrefobject" التي قمت بإنشاء مثيل لها في كل من AppDomains (نظرا لأن التنفيذ لا يرث من marshalbyrefobject). ثم أنا فقط اجتياز المعلمة "executiondata [] البيانات" إلى طريقة "تنفيذ executionHarnessProxy.execute ()". هذا الرجل ثم يستدعي "executionHarness.execute ()" وكل شيء جيد.

مشكلتي الآن هو أنه كلما اجتازت مجموعة البيانات الخاصة بي إلى فئة الوكيل، يستغرق إلى الأبد. تتمتع فئة ExecutionData بسمة [Serializable]، وعملي كل شيء يعمل، لكنني كنت أتساءل عما إذا كان هناك أي طريقة لتسريع هذا الأمر.

  1. هل يمكن أن يكون أسرع إذا فعلت تسلسل / تحيزي، على جانبي حدود appDomain؟
  2. هل كل هذه المرة قضيت تسلسل؟ أم أنها مجرد نقل البيانات المتسلسلة بين AppDomains؟
هل كانت مفيدة؟

المحلول

من الصعب معرفة المزيد من المعلومات، ولكن من ما تصفه، كنت أظن ExecutionData صفيف هو الجاني.

في كل مرة تقوم فيها بالتواصل مع طريقة تتطلب هذه البيانات، ستقوم بتسلسل البيانات في AppDomain، وربما مرة أخرى أيضا. إذا كانت هذه الصفيف كبيرة، فيمكنك تناول الكثير من وقت المعالجة.

سيكون من الأفضل إذا كانت البيانات يمكن تحميلها مباشرة في كل تطبيقات Appdomain، وتزول فقط إلى نتائج التنفيذ مرة أخرى في AppDomain الرئيسي. إذا كان بإمكانك تجنب تصريح صفائف البيانات بين AppDomains، فمن المحتمل أن تسريع العملية بشكل كبير.

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