تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
معلومة- كيف تحسن أداء XMLSerializer باستخدام SGen.exe Tool
#1
كاتب الموضوع : Islam Ibrahim

السلام عليكم ورحمة الله وبركاته

من المؤكد أن أحدكم قد جرب استخدام ال XMLSerializer Class من أجل القيام بعملية ال Serializing لكائنات النوع الخاص به, وبالتأكيد أنه قد لاحظ بطئ شديد في التنفيذ أثناء عمل ال XMLSerializer وقد تستغربون سبب ذلك .

وفي الحقيقة أن ال XMLSerializer يقوم بعمليات معقدة في الخلفية تم في الذاكرة, هذه العمليات تتمثل في إنشاء تجميع Assembly خاص بعملية ال Serialization بحيث يستخدم Serializer ال CodeDom و Reflection للقيام بتلك العمليات , بعد ذلك يقوم RunTime بتحميل ذلك التجميع واستخدامه من أجل Serialization ولك أن تتخيل قدر الذاكرة الذي سيستغرقه ذلك, والمصيبة الكبرى, أن ال XMLSerializer سيقوم بتوليد تجميع لكل نوع من الأنواع المستخدمة داخل الفئة التي تقوم بعمل Serializing لها. وفي كل مرة سيقوم ال Runtime باستدعاء المترجم وال JIT Compiler !

ولهذا السبب قامت مايكرسوفت بتضمين الأداة SGen.exe والتي عادة ماتكون مرفقة مع Windows SDK والذي يتم تنصيبه مع الفيجوال ستوديو, هذه اأداة تعمل على توليد تلك التجميعات أثناء ال Compile Time وليس أثناء RunTime وبالتالي ستوفر على ال XMLSerializer الجهد الإضافي الذي سيبذله وقت التشغيل.

SGen.exe Tool

آلية عمل الأداة بسيطة كل ماعليك هو استخدام Visual Studio Command Prompt وتمرير التجميع الذي يحتوي على النوع الذي ستقوم بعمل Serialing له. بعد ذلك ستفوم الأداة بتوليد التجميع الخاص ال XMLSerializer وسيكون اسمه من الشكل SourceAssemblyName.Serializers.dll حيث SourceAssemblyName هو اسم التميع الذي قمت بتمريره للأداة. هناك طريقة أسهل من استخدام Visual Studio Command Prompt سأوردها فيما ياتي.

الآن افتح مشروعك واتجه نحو خصائص المشروع وفي التبويب Build Event وفي Post-Build Event Command Line أضف ال Command التالي مع مراعاة المسار الصحيح الأداة :


كود :
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\sgen.exe" "$(TargetPath)"
حيث TargetPath يستدل عليه ال Visual Studio على أننا نريد تطبيق ال Command على الملف التنفيذي للمشروع.

عند عمل Build للمشروع ستلاحظ في نافذة المخرجات أن ال الأداة قامت بتوليد التجميع الجديد يمكنك الوصول إليه وستجده بجانب الملف التنفيذي لرنامجك كل ماعليك الآن هو إضافة هذا المجمع ك Reference , هذه الخطوة ضرورية لأنك عندما تستدعي XMLSerializer سيقوم بالكشف عن أي تجميع مرتبط ال Caller Assembly ويبحث فيه إن كان هناك تجميع خاص للقيام بال Serialization للنوع المحدد أم لا , فإذا لم يجده سيظطر للقيام بكل اامراحل التي سبق ذكرها (بناء النجميع أثناء RunTime من جديد)

خيارات سطر الأوامر للأداة SGen.exe Command Line Parameters

سأوردها باختصار وهي :

k

يسمح هذا الخيار لك بالاطلاع على الكود الذي قامت الأداة بتوليده من أجل بناء التجميع ستجده مع التجميع النهائي بالإضافة إلى Temporary Files.

مثال:


كود :
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\sgen.exe" "$(TargetPath)" "/k"
v

لعرض الأنواع التي لم تستطع الأداة عمل Serializer خاص بها

مثال:


كود :
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\sgen.exe" "$(TargetPath)" "/v"
o:path

لتحدبد مسار التجميع النهائي الذي ستقوم الأداة بتوليده.

مثال:


كود :
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\sgen.exe" "$(TargetPath)" "/o:c:"
f

للقيام بعمل Overwriting للتجميع إذا كان موجود سابقًا وهو مفيد إذا كنت تقوم بالتعديل على الفئة المراد عمل Serializing لها من أجل الحصول على آخر إصدار من التجميع المناسب.

مثال:


كود :
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\sgen.exe" "$(TargetPath)" "/k:"
من أجل تفاصيل أكبر يمكنك الإطلاع على الرابط التالي من MSDN:

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

بالتوفيق للجميع.
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  إنشاء مشروع باستخدام sql server و linq وتقارير crystal report ربيع 69 12,736 10-10-15, 01:26 PM
آخر رد: ربيع
  اضافة تمكنك من برمجة php باستخدام الفيجوال ستوديو RaggiTech 0 552 27-10-12, 04:48 PM
آخر رد: RaggiTech
  كيف نقوم بتوزيع مشروعنا باستخدام تقنية Click Once RaggiTech 0 544 09-10-12, 05:42 PM
آخر رد: RaggiTech
  مدخل إلى Visual Studio Extensibility باستخدام Visual Studio SDK RaggiTech 0 439 09-10-12, 05:05 PM
آخر رد: RaggiTech
  معلومة ::: Build Error RaggiTech 0 305 09-10-12, 03:41 PM
آخر رد: RaggiTech
  معلومة ::: StringBuilder RaggiTech 2 418 09-10-12, 11:54 AM
آخر رد: RaggiTech
  Visual Studio Extensibility- إنشاء إطار الأدوات Tool Window RaggiTech 0 1,028 08-10-12, 12:09 PM
آخر رد: RaggiTech
  Visual Studio Extensibility: إنشاء إطار الأدوات Tool Window Islam Ibrahim 0 450 17-09-12, 01:06 PM
آخر رد: Islam Ibrahim
  معلومة: System.IO.Packaging namespace Islam Ibrahim 0 500 17-09-12, 01:02 PM
آخر رد: Islam Ibrahim
  معلومة: Microsoft FxCop Analysis Tool Islam Ibrahim 0 428 17-09-12, 12:51 PM
آخر رد: Islam Ibrahim

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم