سؤال

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

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

إذا كان لدى أي شخص خبرة في هذا الأمر، سأكون ممتنًا جدًا لمساهمته.

تحديث: ربما ينبغي لي توضيح بعض النقاط.

هذا ليس تطبيق ويب، لذا فإن ربط قاعدة بيانات بالتطبيق قد يكون مبالغة في تخزين إعدادات التكوين.هذا هو تطبيق Windows Forms.

وفقًا لتوثيق MSDN، فإن ConfigurationManager ليس فقط لتخزين إعدادات مستوى التطبيق، ولكن أيضًا إعدادات المستخدم.(مهم بشكل خاص، على سبيل المثال، إذا تم تثبيت التطبيق كتطبيق ثقة جزئية.)

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

فقط للتحقق من أنه سيكون قادرًا بالفعل على التعامل مع الحمل الذي أحتاجه، أجريت بعض الاختبارات على جهاز الكمبيوتر المحمول الخاص بي وتمكنت من إجراء 750.000 قراءة و7500 عملية كتابة في الثانية باستخدام الخصائص.وهذا يتجاوز بكثير ما سيفعله طلبي أبدًا حتى أنني اقتربت من الحاجة إلى الشعور بالأمان التام في استخدام الخصائص دون التأثير على الأداء.

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

المحلول

نظرًا لأنك تستخدم تطبيق winforms، فإذا كان موجودًا في .net 2.0، يوجد بالفعل نظام إعدادات المستخدم (يُسمى Properties) مصمم لهذا الغرض. هذه المقالة على MSDN لديه مقدمة جيدة في هذا

إذا كنت لا تزال قلقًا بشأن الأداء، فقم بإلقاء نظرة عليه إصدار SQL المضغوط وهو مشابه لـ SQLite ولكنه عرض Microsoft الذي وجدته يلعب بشكل جيد جدًا مع winforms، كما أن هناك القدرة على ذلك اجعلها تعمل مع Linq

نصائح أخرى

تحقق من SQLite، يبدو أنه خيار جيد لهذا السيناريو بالتحديد.

ديلان،

لا تستخدم ملف تكوين التطبيق لهذا الغرض، استخدم SQL DB (SQLite، MySQL، MSSQL، أيًا كان) لأنه سيكون عليك أن تقلق بشكل أقل بشأن مشكلات التزامن أثناء القراءة والكتابة في ملف التكوين.

ستتمتع أيضًا بمرونة أفضل في نوع البيانات التي تريد تخزينها.يعد قسم إعدادات التطبيق مجرد قائمة مفاتيح/قيمة قد تتفوق عليها مع مرور الوقت ومع نضوج التطبيق.يمكنك استخدام أقسام التكوين المخصصة ولكنك تدخل بعد ذلك في منطقة مشكلة جديدة عندما يتعلق الأمر بالتصميم.

إعدادات التطبيق ليست مخصصة حقًا لما تحاول القيام به.

عندما يبدأ تطبيق .NET الخاص بك، فإنه يقرأ في ملف app.config، ويخزن محتوياته مؤقتًا في الذاكرة.لهذا السبب، بعد الكتابة إلى ملف app.config، سيتعين عليك بطريقة ما فرض وقت التشغيل لإعادة تحليل ملف app.config حتى يتمكن من تخزين الإعدادات مؤقتًا مرة أخرى.هذا غير ضروري

ال أفضل نهج سيكون استخدام قاعدة بيانات لتخزين إعدادات التكوين الخاصة بك.

باستثناء استخدام قاعدة بيانات، يمكنك بسهولة إعداد ملف تكوين XML خارجي.عند بدء تشغيل التطبيق الخاص بك، يمكنك تخزين محتوياته مؤقتًا في كائن NameValueCollection أو كائن HashTable.أثناء قيامك بتغيير/إضافة الإعدادات، يمكنك القيام بذلك على تلك النسخة المخزنة مؤقتًا.عندما يتم إيقاف تشغيل التطبيق الخاص بك، أو في فترة زمنية مناسبة، يمكنك كتابة محتويات ذاكرة التخزين المؤقت مرة أخرى إلى الملف.

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

لن أستخدم ملفات التكوين لتخزين بيانات المستخدم.استخدم ديسيبل.

هل يمكنني أن أسأل لماذا لا تقوم بحفظ إعدادات المستخدم في قاعدة البيانات؟

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

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

أيضًا، إن أمكن، انظر إلى تقسيم إعدادات التطبيق قسم التكوين حتى تتمكن من قراءة الإعدادات ذات الصلة بالكتابة والتخزين المؤقت.

بعد أن قلت كل ذلك، سأفكر جديًا في النظر في تخزين هذه القيم في قاعدة بيانات كما يبدو أنك تقوم بتخزينها بالفعل خيارات المستخدم, ، وليس إعدادات التطبيق.

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