[xsd-users] Returning data by criteria

Bidski bidski at bigpond.net.au
Sat Feb 20 18:53:47 EST 2010


Hi Boris,

What I was missing in the code to pre-load the schema file was a call to 
::xercesc::XMLPlatformUtils::Initialize();. Apparently this is needed for 
the calls to SAX2XMLReader.

Loading time is still hovering at the 3 second mark, even with the addition 
of my other schema/xml files (6 schema/xml files total). The problem I have 
now are memory leaks. Looks to be as though I have 1 memory leak for each 
for schema/xml file. Can you point me in the direction of any specific 
clean-up calls that I need to make to the xerces library? I found that I was 
getting a fairly substantial memory leak from the SAX2XMLReader which was 
resolved with a call to ~SAX2XMLReader();, but I am at a loss to what is 
causing these other memory leaks and Visual Studio is not giving me much to 
go on. Following is an example of one of the memory leaks I am getting.

Detected memory leaks!
Dumping objects ->
{7541} normal block at 0x00727CA0, 148 bytes long.
 Data: <H k      z   ~  > 48 DC 6B 00 CD CD CD CD 84 7A 1E 12 90 7E 1E 12

Any thoughts?

Bidski

--------------------------------------------------
From: "Boris Kolpackov" <boris at codesynthesis.com>
Sent: Saturday, February 20, 2010 2:48 AM
To: "Bidski" <bidski at bigpond.net.au>
Cc: <xsd-users at codesynthesis.com>
Subject: Re: [xsd-users] Returning data by criteria

> Hi Bidski,
>
> In the future please keep your replies CC'ed to the xsd-users mailing
> list as discussed in the posting guidelines:
>
> http://www.codesynthesis.com/support/posting-guidelines.xhtml
>
>
> Bidski <bidski at bigpond.net.au> writes:
>
>> Hi,
>>
>> Thank you for the reply Boris.
>>
>> I recompiled Xerces-C++ and my project making sure that optimizations
>> were turned (set to Full Optimization) and that has decreased the loading
>> time to about 3 secs.
>>
>> I added the following lines to try and per-load my schema but I got some
>> weird errors (seemingly unrelated and to do with other parts of the
>> program, but they disappear upon removal of the following code)
>>
>>                ::std::auto_ptr<::xercesc::SAX2XMLReader> parser
>> (::xercesc::XMLReaderFactory::createXMLReader ()); // errors are
>> generated on this line
>>
>>      parser->setFeature (::xercesc::XMLUni::fgSAX2CoreNameSpaces, true);
>>      parser->setFeature (::xercesc::XMLUni::fgSAX2CoreNameSpacePrefixes,
>> true);
>>      parser->setFeature
>> (::xercesc::XMLUni::fgXercesValidationErrorAsFatal, true);
>>
>>      parser->setFeature (::xercesc::XMLUni::fgSAX2CoreValidation, true);
>>      parser->setFeature (::xercesc::XMLUni::fgXercesSchema, true);
>>      parser->setFeature (::xercesc::XMLUni::fgXercesSchemaFullChecking,
>> false);
>>
>> wchar_t tmp[MAX_PATH];
>>      swprintf_s(tmp, MAX_PATH, _T("%sData\\Inventory.xsd"),
>> theApp.szAppDirectory);
>>      parser->loadGrammar (tmp, ::xercesc::Grammar::SchemaGrammarType,
>> true);
>>      parser->setFeature
>> (::xercesc::XMLUni::fgXercesUseCachedGrammarInParse, true);
>>
>> Am I missing something here?
>
> I don't see anything wrong with the above line. You may want to double
> check that you have included all the necessary headers (you can copy
> them from the performance example).
>
>
>> I am planning to add other documents to this part of the program once I
>> am satisfied with the operation of this part. These will be smaller
>> documents. The validation is doing some form of type-checking on my xml
>> document isnt it? If this is the case then I would prefer not to turn it
>> off. As I intend to use this as a database, extra type checking is always
>> a good thing in my opinion.
>
> Schema validation makes sure that your documents conform to the 
> constraints
> defined in XML Schema.
>
>
>> I am yet to try expat, would like to exhaust all possible avenues within
>> xerces before i try something new.
>>
>> During recompilation of the xerces library under visual studio 2010 I
>> encountered a load of warnings that I would like to check with you.
>
> You can ignore all of them, they are harmless.
>
> Boris
>
>
> [The rest of the email foolows for context].
>
>> First off, within XSValueTest there were some lines like these
>>
>> #if SIZEOF_LONG == 8
>>    XSValue::XSValue_Data act_v_ran64_v_1; act_v_ran64_v_1.fValue.f_long =
>> (long)+9223372036854775807;
>>    XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_long =
>> (long)-9223372036854775808;
>> #endif
>>    XSValue::XSValue_Data act_v_ran32_v_1; act_v_ran32_v_1.fValue.f_long =
>> (long)+2147483647;
>>    XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_long =
>> (long)-2147483648;
>>
>> The compiler was giving warnings about the unary minus operator being
>> used on a unsigned type ((long)-2147483648). I changed these lines to the
>> following
>>
>> #if SIZEOF_LONG == 8
>>    XSValue::XSValue_Data act_v_ran64_v_1; act_v_ran64_v_1.fValue.f_long =
>> _I64_MAX;
>>    XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_long =
>> _I64_MIN;
>> #endif
>>    XSValue::XSValue_Data act_v_ran32_v_1; act_v_ran32_v_1.fValue.f_long =
>> LONG_MAX;
>>    XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_long =
>> LONG_MIN;
>>
>> The values of LONG_MAX/MIN and _I64_MAX are still the same as the
>> hard-coded values originally there.
>>
>> The other warning was about " 'this' : used in base member initializer
>> list " after a little research on the matter it looked as though the
>> behaviour would be ok as long as the 'this' pointer wasnt derefenced
>> until after all construction had been completed. I added a
>>
>>    #pragma warning(disable:4355)
>>
>> to disable that warning. Here is an example of this warning
>>
>> DOMDocumentImpl::DOMDocumentImpl(DOMImplementation* domImpl,
>> MemoryManager* const manager)
>>    : fNode(this),                                // These two lines
>>      fParent(this),                              // generate this warning
>>      fNodeIDMap(0),
>>      fInputEncoding(0),
>>      fXmlEncoding(0),
>>      fXmlStandalone(false),
>>      fXmlVersion(0),
>>      fDocumentURI(0),
>>      fDOMConfiguration(0),
>>      fUserDataTableKeys(17, manager),
>>      fUserDataTable(0),
>>      fCurrentBlock(0),
>>      fFreePtr(0),
>>      fFreeBytesRemaining(0),
>>      fHeapAllocSize(kInitialHeapAllocSize),
>>      fRecycleNodePtr(0),
>>      fRecycleBufferPtr(0),
>>      fNodeListPool(0),
>>      fDocType(0),
>>      fDocElement(0),
>>      fNameTableSize(257),
>>      fNormalizer(0),
>>      fRanges(0),
>>      fNodeIterators(0),
>>      fMemoryManager(manager),
>>      fDOMImplementation(domImpl),
>>      fChanges(0),
>>      errorChecking(true)
>> {
>>    fNameTable = (DOMStringPoolEntry**)allocate (
>>      sizeof (DOMStringPoolEntry*) * fNameTableSize);
>>    for (XMLSize_t i = 0; i < fNameTableSize; i++)
>>      fNameTable[i] = 0;
>> }
>>
>> Are those actions in line with what should be happening within the 
>> program?
>>
> 



More information about the xsd-users mailing list