استخدام ملفات الذاكرة المعينة في C# لتخزين أنواع المراجع

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

سؤال

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

هل هناك طريقة لتخزين الذاكرة المستخدمة بنوع مرجعي من الملف وإعادة بناء الكائن من تلك النقطة من الذاكرة (بدون تسلسل ثنائي)؟

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

المحلول

الملفات المعينة للذاكرة غير متوافقة بشكل أساسي مع جامع القمامة. وهذا هو السبب في أن الأمر استغرق وقتًا طويلاً لمثل هذه ميزة نظام التشغيل الرئيسية للحصول على دعمها .NET. يجب أن يتم التسلسل الأنواع المرجعية لعرض MMF ، MemordMappedViewStream ، لا توجد طريقة للتغلب على ذلك. يوجد تقييد مماثل في التعليمات البرمجية غير المُدارة ، يجب أن يتم تسوية الكائنات ذات المؤشرات بحيث تكون الكائنات الموجهة إلى المرئية مرئية في العرض أيضًا.

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

نصائح أخرى

أعتقد أن تخزين نقطة من الذاكرة أمر غير قابل للتطبيق ببساطة لأن هذه الذاكرة ، إذا كانت تحتوي على أنواع مرجعية ، سيكون لها مؤشرات على كتل أخرى من الذاكرة والتي من المحتمل ألا تنطبق في المرة القادمة التي يتم فيها الوصول إلى الملف. لهذا السبب يوجد التسلسل الثنائي: للحفاظ على هذه الأنواع من المراجع. إذا كنت ترغب حقًا في تحكم ضيق ، فسأستخدم System.io.BinaryWriter و BinaryReader للتحكم الكامل على ما هو مكتوب بالضبط في الملف في أي تسلسل ، مع تقليل النفقات العامة.

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

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