سؤال

وأحتاج المشورة. لدي التطبيقات التي تستورد 10000 الصفوف التي تحتوي على اسم وعنوان من ملف نصي إلى XElements التي تمت إضافتها لاحقا إلى قائمة انتظار متزامنة. عندما اكتمال عملية الاستيراد التطبيق يولد المواضيع عامل أن معالجة XElements التي كتبها deenqueuing لهم، إجراء مكالمة قاعدة البيانات، إدخال مخرجات قاعدة البيانات في وثيقة طلب وإدراج وثيقة معالجتها إلى قائمة انتظار الإخراج. عندما تم معالجة جميع الطلبات يتم كتابة قائمة انتظار الإخراج إلى القرص باعتبارها وثيقة XML.

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

وأسئلتي هي. وXElements يبدو أن استخدام قدرا كبيرا من الذاكرة وأنا أعلم أن هناك الكثير من تحليل كما يجعل الوثيقة طريقها من خلال طرق المعالجة. أنا النظر في استبدال XElements مع كائن القاموس ولكن أنا متشكك سوف الربح يكون يستحق كل هذا الجهد. فمن حيث الجوهر سوف تنجز الشيء نفسه.

والأفكار؟

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

المحلول

وهكذا فأنت لا تستخدم أي XML على هذا النحو؟ كنت فقط باستخدام XElement كمجموعة من أزواج الاسم / القيمة؟ إذا كان الأمر كذلك، فما استقاموا لكم فاستقيموا بالتأكيد استخدام القاموس. أتوقع التعليمات البرمجية ليحتمل يخرج نظافة كذلك.

من ناحية أخرى إذا كنت حقا باستخدام XML، ربما كنت ترغب في البقاء مع XElement.

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

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

نصائح أخرى

<ع> استخدام LINQ يمكن أن يكون له معنى إذا يمكنك تجنب الحاجة إلى تخزين الشجرة بأكملها قبل استخدامه.

وأود أن ننظر كما يفعل الكثير من تجهيز ممكن في بناء الاستعلام من كل صف.

وأنت ثم أخذ نتائج الاستعلام ومن ثم معالجتها، تخزين النتيجة في قاعدة البيانات.

وهذا سوف يقلل مشاكل الذاكرة، حيث أن كل صف للقراءة فقط في عند الحاجة ومن ثم معالجتها وحفظها.

وأنت قد تجد هذه مفيدة: HTTP: // www.onedotnetway.com/tutorial-reading-a-text-file-using-linq/

وتأخذ نتائج الاستعلام الخاص بك، هل لحلقة من خلال كل العملاء وحفظ السجل:

var query =
        from c in
            (from line in File.ReadAllLines(filePath)
             let customerRecord = line.Split(',')
             select new Customer()
                 {
                     Firstname = customerRecord[0],
                     Lastname = customerRecord[1],
                     PhoneNumber = customerRecord[2],
                     City = customerRecord[3],
                     Country = customerRecord[4]
                 })
        where c.Country == "UK"
        select c;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top