StringReader reuse for XML Parsing in C#XML schema parsing and XML creation from flat filesParsing XML in PythonXmlCmdBuilder - doing away with inline xmlObject to object mapping verification - is this extension method useful?XML parsing in Java using SAX parserXML/HTML Read/WriteGeneric methods for serializing and deserialzing xml files using streamsParse child value from XML using ezxmlAnalyze Shakespeare's Macbeth parsing XML from web using NokogiriParsing XML documents with LXML
Why is "Reports" in the sentence below without the article "The"?
Wild Shape Centaur Into a Giant Elk: do their Charges stack?
Symmetry in quantum mechanics
Process builder are scheduled actions independent?
Least quadratic residue under GRH: an explicit bound
Latin words with no plurals in English
How to handle columns with categorical data and many unique values
Could a US political party gain complete control over the government by removing checks & balances?
Extreme, but not acceptable situation and I can't start the work tomorrow morning
How to deal with fear of taking dependencies
What do you call something that goes against the spirit of the law, but is legal when interpreting the law to the letter?
Some basic questions on halt and move in Turing machines
Sort in WP_Query(), not filter? Is it possible?
How do you conduct xenoanthropology after first contact?
Denied boarding due to overcrowding, Sparpreis ticket. What are my rights?
cryptic clue: mammal sounds like relative consumer (8)
How to answer pointed "are you quitting" questioning when I don't want them to suspect
Why do UK politicians seemingly ignore opinion polls on Brexit?
What kind of transistor turns on with 0.2 volts?
Can you lasso down a wizard who is using the Levitate spell?
Is there a familial term for apples and pears?
DOS, create pipe for stdin/stdout of command.com(or 4dos.com) in C or Batch?
Is domain driven design an anti-SQL pattern?
A newer friend of my brother's gave him a load of baseball cards that are supposedly extremely valuable. Is this a scam?
StringReader reuse for XML Parsing in C#
XML schema parsing and XML creation from flat filesParsing XML in PythonXmlCmdBuilder - doing away with inline xmlObject to object mapping verification - is this extension method useful?XML parsing in Java using SAX parserXML/HTML Read/WriteGeneric methods for serializing and deserialzing xml files using streamsParse child value from XML using ezxmlAnalyze Shakespeare's Macbeth parsing XML from web using NokogiriParsing XML documents with LXML
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
I'm developing a generic XML Parser that would parse chunks of a given XML to a given list of types by using the "Pull parsing" approach, which I think is more "memory efficient/predictable", instead of loading unknown-sized XML files into memory.
I'm caching the XmlSerializer objects for the given types and the last bit that I'm concerned is the following:
The Deserialize method from XmlSerializer expects a Stream. To accomplish that, for each object that matches the criteria, I'm creating a new StringReader.
My concern is: If I parse an arbitrarily big XML file, for each object that meets the criteria I'll be creating a new StringReader object. This is a "short-lived" object and for sure I'll get lots of GC calls to deal with dangling StringReader objects, which I guess that may be harmful, performance-wise.
I have the following questions:
- Is there a way to recycle/reuse a StringReader to reduce the number of GC calls?
- Is this way of parsing scalable?
My current code looks like this:
public IColletion<object> RetrieveObjectsFromXml(
Stream stream,
XmlSchemaSet schemaSet,
params Type[] types)
var result = new List<object>();
// validations and other operations here...
using (var reader = XmlReader.Create(stream, readerSettings))
while (reader.Read())
if (reader.NodeType != XmlNodeType.Element)
continue;
// using HashSet, so this check will be O(1)
if (TagNameWillBeRetrieved(reader.SchemaInfo.SchemaElement.Name))
var data = reader.ReadOuterXml();
using (var stringReader = new StringReader(data))
// this method returns a XmlSerializer for a type
// which this tag belongs to.
var obj = GetXmlSerializerForTag(
reader.SchemaInfo.SchemaElement.Name)
.Deserialize(stringReader);
// this is just for brevity. I'll be yielding results here,
// yielding events or something else
// instead of returning a list of objects :)
result.Add(obj);
return result;
c# memory-management xml
New contributor
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
add a comment |
$begingroup$
I'm developing a generic XML Parser that would parse chunks of a given XML to a given list of types by using the "Pull parsing" approach, which I think is more "memory efficient/predictable", instead of loading unknown-sized XML files into memory.
I'm caching the XmlSerializer objects for the given types and the last bit that I'm concerned is the following:
The Deserialize method from XmlSerializer expects a Stream. To accomplish that, for each object that matches the criteria, I'm creating a new StringReader.
My concern is: If I parse an arbitrarily big XML file, for each object that meets the criteria I'll be creating a new StringReader object. This is a "short-lived" object and for sure I'll get lots of GC calls to deal with dangling StringReader objects, which I guess that may be harmful, performance-wise.
I have the following questions:
- Is there a way to recycle/reuse a StringReader to reduce the number of GC calls?
- Is this way of parsing scalable?
My current code looks like this:
public IColletion<object> RetrieveObjectsFromXml(
Stream stream,
XmlSchemaSet schemaSet,
params Type[] types)
var result = new List<object>();
// validations and other operations here...
using (var reader = XmlReader.Create(stream, readerSettings))
while (reader.Read())
if (reader.NodeType != XmlNodeType.Element)
continue;
// using HashSet, so this check will be O(1)
if (TagNameWillBeRetrieved(reader.SchemaInfo.SchemaElement.Name))
var data = reader.ReadOuterXml();
using (var stringReader = new StringReader(data))
// this method returns a XmlSerializer for a type
// which this tag belongs to.
var obj = GetXmlSerializerForTag(
reader.SchemaInfo.SchemaElement.Name)
.Deserialize(stringReader);
// this is just for brevity. I'll be yielding results here,
// yielding events or something else
// instead of returning a list of objects :)
result.Add(obj);
return result;
c# memory-management xml
New contributor
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
add a comment |
$begingroup$
I'm developing a generic XML Parser that would parse chunks of a given XML to a given list of types by using the "Pull parsing" approach, which I think is more "memory efficient/predictable", instead of loading unknown-sized XML files into memory.
I'm caching the XmlSerializer objects for the given types and the last bit that I'm concerned is the following:
The Deserialize method from XmlSerializer expects a Stream. To accomplish that, for each object that matches the criteria, I'm creating a new StringReader.
My concern is: If I parse an arbitrarily big XML file, for each object that meets the criteria I'll be creating a new StringReader object. This is a "short-lived" object and for sure I'll get lots of GC calls to deal with dangling StringReader objects, which I guess that may be harmful, performance-wise.
I have the following questions:
- Is there a way to recycle/reuse a StringReader to reduce the number of GC calls?
- Is this way of parsing scalable?
My current code looks like this:
public IColletion<object> RetrieveObjectsFromXml(
Stream stream,
XmlSchemaSet schemaSet,
params Type[] types)
var result = new List<object>();
// validations and other operations here...
using (var reader = XmlReader.Create(stream, readerSettings))
while (reader.Read())
if (reader.NodeType != XmlNodeType.Element)
continue;
// using HashSet, so this check will be O(1)
if (TagNameWillBeRetrieved(reader.SchemaInfo.SchemaElement.Name))
var data = reader.ReadOuterXml();
using (var stringReader = new StringReader(data))
// this method returns a XmlSerializer for a type
// which this tag belongs to.
var obj = GetXmlSerializerForTag(
reader.SchemaInfo.SchemaElement.Name)
.Deserialize(stringReader);
// this is just for brevity. I'll be yielding results here,
// yielding events or something else
// instead of returning a list of objects :)
result.Add(obj);
return result;
c# memory-management xml
New contributor
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
I'm developing a generic XML Parser that would parse chunks of a given XML to a given list of types by using the "Pull parsing" approach, which I think is more "memory efficient/predictable", instead of loading unknown-sized XML files into memory.
I'm caching the XmlSerializer objects for the given types and the last bit that I'm concerned is the following:
The Deserialize method from XmlSerializer expects a Stream. To accomplish that, for each object that matches the criteria, I'm creating a new StringReader.
My concern is: If I parse an arbitrarily big XML file, for each object that meets the criteria I'll be creating a new StringReader object. This is a "short-lived" object and for sure I'll get lots of GC calls to deal with dangling StringReader objects, which I guess that may be harmful, performance-wise.
I have the following questions:
- Is there a way to recycle/reuse a StringReader to reduce the number of GC calls?
- Is this way of parsing scalable?
My current code looks like this:
public IColletion<object> RetrieveObjectsFromXml(
Stream stream,
XmlSchemaSet schemaSet,
params Type[] types)
var result = new List<object>();
// validations and other operations here...
using (var reader = XmlReader.Create(stream, readerSettings))
while (reader.Read())
if (reader.NodeType != XmlNodeType.Element)
continue;
// using HashSet, so this check will be O(1)
if (TagNameWillBeRetrieved(reader.SchemaInfo.SchemaElement.Name))
var data = reader.ReadOuterXml();
using (var stringReader = new StringReader(data))
// this method returns a XmlSerializer for a type
// which this tag belongs to.
var obj = GetXmlSerializerForTag(
reader.SchemaInfo.SchemaElement.Name)
.Deserialize(stringReader);
// this is just for brevity. I'll be yielding results here,
// yielding events or something else
// instead of returning a list of objects :)
result.Add(obj);
return result;
c# memory-management xml
c# memory-management xml
New contributor
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 4 mins ago
cezarlamanncezarlamann
1011
1011
New contributor
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
cezarlamann is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
cezarlamann is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217088%2fstringreader-reuse-for-xml-parsing-in-c%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
cezarlamann is a new contributor. Be nice, and check out our Code of Conduct.
cezarlamann is a new contributor. Be nice, and check out our Code of Conduct.
cezarlamann is a new contributor. Be nice, and check out our Code of Conduct.
cezarlamann is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217088%2fstringreader-reuse-for-xml-parsing-in-c%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown