سؤال

مؤخرا في الشركة لدينا قاعدة بيانات MSSQL من بعض المشاريع القديمة التي يجب أن تدمج في الحل الحالي.

قاعدة بيانات حوالي 100-150 الإجراءات المخزنة استخدام XML السيارات شرط ، بحيث الاستفسارات عودة كاملة كائن الرسم البياني كما XML بدلا من الصفوف.

أسرع الحل (بالنسبة لنا في الشركة) لإنشاء تسلسل الطبقات (مع xsd-أداة) استنادا إلى بيانات xml عاد من قاعدة البيانات.

هذا هو رمز نستخدمها instatiate هذه الكائنات:

 public static T GetObjectFromXml<T>(DbCommand command)
    {
        SqlDatabase db = (SqlDatabase)DB;
        XmlReader xmlReader = null;
        T returnValue;

        xmlReader = db.ExecuteXmlReader(command);
        xmlReader.MoveToContent();

        XmlSerializer serializer = new XmlSerializer(typeof(T));

        returnValue = (T)serializer.Deserialize(xmlReader);

        xmlReader.Close();

        return returnValue;


    }

ديسيبل تمثل قاعدة بيانات فئة من مكتبة المؤسسة.

عندما sp يعود الكثير من البيانات (على سبيل المثال بعض مجموعة كبيرة من الكائنات مع الكثير من الأطفال والأحفاد grandgrndchldrn...الكائنات في ذلك) تنفيذ هذه الطريقة تستغرق وقتا طويلا جدا.

البيانات في التطبيق سوف surrely تستمر في النمو ، يجب أن أفكر في الاستفادة المثلى من هذا.

لذا أنا أتساءل إذا كان هذا هو ممارسة سيئة (باستخدام FORXML, XmlReader و إلغاء تسلسل), أو كتابة الإجراءات المخزنة و استخدام SqlDataReaders أو Linq2Sql ، أو أن هناك بعض perf.المسألة في هذا مقتطف (سوء استخدام الأدوية أو أي شيء آخر) ?


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

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

المحلول

تحتاج إلى تحليل هذه المشكلة من حيث ما في XML يتم إرجاعها.هو XML عودته البيانات التي لا تحتاج إلى أن تكون في الذاكرة في كل مرة ؟ ثم تسلسل في الذاكرة ربما لا يكون أفضل شيء.إذا كنت تحتاج فقط إلى معالجة البيانات قليلا في كل مرة ، ثم عليك ربما عملية XML مثل XML و الحفاظ على XmlReader حول أن تقرأ قليلا في وقت واحد.

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