هل I/O مع كائن القسم (CreateFileMapping) أسرع من واجهات برمجة التطبيقات الأساسية (قراءة/كتابة)؟

StackOverflow https://stackoverflow.com/questions/4142125

سؤال

  1. CreateFileMapping و MapViewoffile ، ثم نقوم بإدخال/إخراج مع وظيفة مثل memcpy.
  2. فقط استخدم القراءة/الكتابة.

هل أول واحد أسرع من الثانية؟ أنا لا أفهم ذلك.

لماذا هو أسرع؟
إذا استخدمنا كائن قسم ، فيمكننا الحصول على المزيد من فوائد ذاكرة التخزين المؤقت من VMM أو Manager؟

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

المحلول

يكون تعيين ذاكرة الملف أسرع عند حدوث الصفحة ، حيث يتم استخدام الملف نفسه كتخزين ترحيل.

إذا لم يتم تغيير الذاكرة الموجودة في الملف المعين للذاكرة ، فلا داعي للتغلب على الصفحة إلى ملف الترحيل لأن البيانات الموجودة في الملف بالفعل ويمكن لـ Windows إعادة قراءة الصفحة من القرص. يتم تحميل ملفات .exe و .dll باستخدام هذه الآلية ، وبالتالي فهي تخزين صفحتها الخاصة.

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

تستهلك واجهات برمجة التطبيقات (APIs Plain Page "ذاكرة مدعومة للاحتفاظ بمحتويات الملف أثناء وجودها في الذاكرة.

من منظور مختلف قليلاً ، يتم تحسين كلا واجهات برمجة التطبيقات حيث يتم بالفعل استخدام ملفات ملفات القراءة/الكتابة تحت الغطاء حتى تحصل على تحسين صغير لأنك تستخدم تجريدًا أقل

ستعمل كلتا الآليتين على توظيف مدير VMM/Cache.

نصائح أخرى

يتضمن استخدام Readfile/WriteFile العديد من عمليات نسخ كتلة الذاكرة الإضافية ، لذلك سيكون أبطأ ، من استخدام MMFs. سؤال آخر هو كم سيكون أبطأ - هذا ما تحتاجه لقياس نفسك.

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