سؤال

في برنامجي ، أحمل ملفين مفتوحين للكتابة ، ملف محتوى ، يحتوي على أجزاء من البيانات ، وملف الفهرس ، يحتوي على خريطة تم كتابة أجزاء من البيانات حتى الآن.

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

الصيد هو أنني أود تجنب منع IE القيام بـ FSYNC ، سواء من أجل الكمون والإنتاجية.

أيه أفكار؟

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

المحلول

لا أعتقد أنه يمكنك القيام بذلك بسهولة في مسار تنفيذ واحد. تحتاج إلى FSYNC لضمان الكتابة إلى القرص - وسيتعين على هذا الانتظار للكتابة.

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

قد يكون من المفيد البحث لمعرفة ما إذا كان هذا مغلفًا جيدًا بحيث يكون مفيدًا لك في مصدر أي من قواعد البيانات المعاملة. يمكنك أيضًا التحقيق في خيار SYNC عند قيامك بتركيب نظام الملفات لرفع المحتوى.

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