문제

최근 회사에서는 현재 솔루션에 통합 해야하는 일부 오래된 프로젝트에서 MSSQL 데이터베이스를 얻었습니다.

데이터베이스에는 약 100-150 개의 저장된 절차가 XML 자동 조항에 사용되므로 쿼리가 행 대신 XML로 완전한 객체 그래프를 반환합니다.

가장 빠른 솔루션 (회사에서)은 데이터베이스에서 반환 된 XML 데이터를 기반으로 직렬화 가능한 클래스 (XSD-Tool 포함)를 만드는 것이 었습니다.

이것은 우리가 해당 객체를 인수하는 데 사용하는 코드입니다.

 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;


    }

DB는 엔터프라이즈 라이브러리의 데이터베이스 클래스를 나타냅니다.

SP가 많은 데이터를 반환 할 때 (예를 들어, 많은 어린이, 손자, Grandgrndchldrn ... 객체가있는 많은 큰 개체 모음)이 방법의 실행은 매우 오래 지속됩니다.

응용 프로그램의 데이터는 계속해서 계속 증가 할 것이며, 이것을 최적화 할 생각이어야합니다.

따라서 이것이 나쁜 관행인지 궁금합니다 (FORXML, XMLREADER 및 DESORIALIZE 사용), 또는 저장된 절차를 다시 작성하고 SQLDATAREADERS 또는 LINQ2SQL을 사용해야 하거나이 스 니펫 내에 약간의 성능이 있습니다 (제네릭 또는 다른 것의 불완전한 사용이 있습니다. )?


편집하다나는 한 번에 큰 탄약의 데이터를로드하는 것이 나쁜 관행이라는 것을 알고 있으며,로드 프로세스가 작은 덩어리로 분할되어야한다는 것을 알고 있지만,이 특정 코드에 문제가 있는지 궁금합니다.

도움이 되었습니까?

해결책

이 문제를 분석해야합니다. 안에 XML이 반환됩니다. 한 번에 메모리에있을 필요가없는 XML 리턴 데이터입니까? 그런 다음 모든 것을 메모리로 삼는 것이 아마도 가장 좋은 것은 아닙니다. 한 번에 데이터를 조금만 처리 해야하는 경우 XML을 XML로 처리하고 XMLReader를 한 번에 약간 읽도록 유지해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top