لقد قمت بالأمس بنشر مقال حول كيفية تعظيم أداء .NET، وكان هناك العديد من التعليقات، شكرًا جزيلاً لك على تعليقاتك، وقد أشار بعضهم إلى بعض الأخطاء في المقالة، وأود أن أشكر أولئك الذين كتبوا تعليقاتهم بصبر لقد استفاد كثيرا.
ركزت مقالة الأمس بشكل أساسي على تحسين السرعة من خلال بعض تفاصيل كتابة التعليمات البرمجية. قد يكون من الصعب أن تشعر فعليًا بتحسن الأداء، ولكن كمبرمج، فإن تحسين جودة التعليمات البرمجية الخاصة بك باستمرار هو الهدف الذي تسعى إليه باستمرار.
في الواقع، مع تطور الأجهزة، أصبحت سرعة الأجهزة الآن تلبي احتياجات معظم الأشخاص، حتى أن بعض الأشخاص يشيرون إلى أن الخوارزميات أصبحت أقل فعالية في تطوير البرامج الحالية. أتذكر أنني شاهدت مقطع فيديو عن بنية البيانات من معهد ماساتشوستس للتكنولوجيا من قبل، وطرح الأستاذ الذي قام بتدريس المحاضرة سؤالاً (لا أتذكر بوضوح، ولكن هذا ما كان يقصده): بما أن الخوارزميات لم تعد مهمة، فلماذا لا نزال هنا؟ ماذا عن الأبحاث؟ وكانت الإجابة التي قدمها هي "السرعة". نحن نتبع السرعة مثلما يسعى سائقو السباقات إلى السرعة!
في تطوير العديد من الأنظمة في الوقت الحاضر، لا تعد السرعة هي الأولوية الأولى، وغالبًا ما يتم إعطاء الأولوية القصوى لأنظمة أخرى مثل الاستقرار والأمن وقابلية إعادة الاستخدام. في الوقت الحاضر، لم يتم تصميم أنماط التصميم وهندسة التطوير وما إلى ذلك بشكل أساسي لحل مشكلات الأداء. تم أخذ ما سبق في الاعتبار من قبل المحللين والمهندسين المعماريين. لا يمكن للمبرمجين الصغار مثلنا تحسين البرنامج إلا في بعض الأماكن الصغيرة في الكود والفئة والطريقة وسطر التعليمات البرمجية. أعتقد أنه من الجيد إيلاء المزيد من الاهتمام للتفاصيل.
حسنًا، يكفي هراء، فلنتحدث عن موضوع اليوم. إن الأداء العام للعديد من أنظمة الشبكات التي تم تطويرها الآن يعتمد بشكل أساسي على قراءة البيانات ونقلها، وهي الأهداف التي نسعى لتحقيقها. سأتحدث عن كيفية تحسين أداء .net من هذا الجانب.
1. ترحيل البيانات في طبقة البيانات. يمكن تنفيذه من خلال ExcuteReader أو الإجراءات المخزنة. هناك العديد من الطرق، لذلك لن أخوض في التفاصيل. (يمكنك قراءة ما كتبته)
2. حاول استخدام ExcuteReader لقراءة البيانات PetShop 4.0، يمكن الوصول إلى جميع البيانات ويتم تنفيذها جميعًا باستخدام ExcuteReader، إلا إذا كانت لديك متطلبات خاصة لعدم الاتصال (مثل SmartClient، وما إلى ذلك).
3. في المواقف غير المتصلة، يكون لاستخدام DataTable أداء أفضل من استخدام DataSet، إلا إذا كنت تريد حفظ جداول علائقية متعددة.
4. استخدم أسلوب ImportRow الخاص بـ DataTable.
في بعض الحالات، من الضروري نسخ كمية كبيرة من البيانات من DataTable إلى آخر. يمكن أن يؤدي استخدام طريقة ImportRow الخاصة بـ DataTable إلى تحسين الأداء بشكل كبير. عندما تكون كمية البيانات صغيرة، لا يوجد فرق كبير في كمية البيانات يصل إلى أكثر من 10000 صف، ويمكن تحسينه بشكل كبير ويمكن أن يصل إلى عدة مرات.
5. تسلسل البيانات في ملفات ثنائية لسهولة نقلها.
عندما نقوم بمعالجة كائنات DataSet وDataTable، يمكننا إجراء تسلسل لها في ملفات XML إذا تم نقلها عبر الشبكة، فستتسبب ملفات XML في حدوث مشكلات في الموارد مثل الذاكرة وعرض النطاق الترددي للشبكة. في هذا الوقت، يمكننا إجراء تسلسل له في ملف ثنائي، بحيث يتم تقليل الملفات التي تم إنشاؤها كثيرًا، ويكون الكود كما يلي:
FileStream fs = new fileStream(@"XMLData.bin",FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,XMLData);
fs.colse();
يُسمى الملف الثنائي الذي تم إنشاؤه بهذه الطريقة XMLBinary. إذا قمت بفتحه مباشرةً باستخدام WINHEX، فيمكنك رؤية بعض علامات XML فيه، وإذا كانت كمية البيانات كبيرة، أضف سطرًا من التعليمات البرمجية:
XMLData.RemortingFormat = SerializationFormat.Binary;
يُطلق على الملف الذي تم إنشاؤه في هذا الوقت اسم ملف TrueBinary. عند معالجة عدد كبير (أكثر من 10000 سطر)، يكون حجم الملف الذي تم إنشاؤه جزءًا من XMLBinary. يتم حفظ المخطط تلقائيًا أثناء التسلسل، مما يجعل عملية إلغاء التسلسل بسيطة. لا أعرف حتى الآن مقدار الانخفاض في أداء إلغاء التسلسل مقارنة بقراءة XML مباشرة.
6. الاستفادة بشكل معقول من تجمعات الاتصال.
يلعب تجمع الاتصالات دورًا كبيرًا في تحسين الأداء ويتم تشغيله افتراضيًا. الحد الأدنى لحجم التجمع الافتراضي هو 0، والذي يتم تعيينه بشكل عام على قيمة صغيرة نسبيًا، مثل 5. الحد الأقصى لحجم التجمع الافتراضي هو 100، وهو ما يكفي لمعظم مواقع الويب، وبالنسبة للمواقع الكبيرة، قم بزيادته بشكل مناسب.
7. التطوير باستخدام SQLCLR
إذا كنت تركز على فتح سلسلة SQL Server، فيجب عليك دراسة SQLCLR، فهي قوية جدًا ويمكنها تحسين الأداء في العديد من المواقف (خاصة التطبيقات الكبيرة على مستوى المؤسسات).
8. قم بالوصول إلى APP.Config/Web.Config من خلال الفئات الثابتة
لدينا الكثير من معلومات التكوين في APP.Config/Web.Config، والتي يتم الوصول إليها بشكل متكرر جدًا. في هذا الوقت، نقوم بإنشاء فئة ثابتة، ويتم الوصول إلى جميع السمات من خلال الفئة الثابتة، والتي يمكن أن تحسن الأداء إلى حد ما. تقوم الفئة الثابتة بمثيل Config مرة واحدة فقط، وسيقوم APP.Config/Web.Config بإنشاء الكثير من عمليات الإدخال والإخراج.
فئة ثابتة عامة MyWebConfig
{
ثابت MyWebConfig ()
{
سلسلة كون =
ConfigurationManager.ConnectionStrings["الاتصال"].
سلسلة الاتصال;
}
سلسلة ثابتة عامة DbConnectionString
{
يحصل
{
إرجاع ConnString؛
}
}
}
حسنًا، هذا كل ما لدينا اليوم وأود أن أشير إلى أي أخطاء وأوجه قصور. أنتم مدعوون لطرح آراء أفضل وإحراز التقدم معًا.