سؤال

وفي طلبي (ج # 3.5) هناك العديد من عمليات الوصول إلى ملف XML واحد (القراءة والكتابة) كثيرا جدا. يتم وضع رمز الوصول إلى الملف في التجميع المشار إليه من قبل زوجين لا بأس به من التطبيقات الأخرى. على سبيل المثال خدمة ويندوز قد instanciate الطبقة MyFileReaderWriter (locatied في الجمعية المذكورة سابقا) واستخدام أساليب القراءة / الكتابة لهذه الفئة.

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

ولقد نسيت أن أذكر أنني حاليا استخدام XDocument (البنية التحتية LInq2Xml) للقراءة / كتابة محتوى الملف.

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

المحلول

لتبدأ، والتأكد من أن جميع الوصول إلى وثيقة XML يتم من خلال نسخة واحدة.

وبعد ذلك وضع آلية القفل (أن تنتظر فتح) في بداية الدالة التي الوصول إليه وفتحه في نهاية المطاف.

نصائح أخرى

إذا بالكتابة كنت إلحاق فقط للوثيقة، ثم حاول هذا

http://msdn.microsoft.com/en-us/library /aa302289.aspx

وأساسا مستند XML الخاصة بك قذيفة مع بداية ونهاية العلامة. بين العلامات هو إدراج إشارة، أن يحيل ملف آخر، وهذا ملف آخر هو نص المستند XML. لعمليات الكتابة وهذا هو أسرع عدة مرات، لأنك ليس لديك لتحميل ملف XML في كل مرة تكتب إليه، وأنت لا تكتب الملف بأكمله في كل مرة.

<ع> استخدام فئة XmlWriter يمكنك بسهولة جدا إلحاق العقد إلى نهاية الملف الجسم.

عند البعض الآخر يريد أن يقرأ أكس، فإنها ببساطة فتح المستند، محلل XML الخاصة "يعرف" لتحميل وتحليل كل الملفات.

وآمل أن يساعد هذا.

وماذا تعني البيانات أمر بالغ الأهمية؟ هو ملف XML لم تستخدم بشكل خاص من قبل طلبك؟

وكما بسيطة (وربما جيدة بما فيه الكفاية) وسيلة لتأمين وصول IO إلى ملف سيكون لإنشاء فئة مصنع الثابتة التي توفر "قراءة إرسال رمزي" الكائن أن كل عملية I / O أن يكون لديك تأمين على.

public static object GetReadWriteToken(String fileName)
{
    //use a hashtable to retreive an object, with filename as key
    return token;
}

ووببساطة القيام بذلك القراءة أثناء والكتابة:

lock(GetReadWriteToken(@"C:\important.xml"))
{
    //io code
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top