XML/Dataset och prestanda
11 svar · 519 visningar · startad av Pedda
Jag har mest jobbat utan sessioner och då använt Cache objektet för lagring av DataTable. Fungerar finemang.
Hur stor är xml filen?
Skall det utföras utsökningar i den?
Vad är det för typ av data?
Är det olika xml filer för olika kunder?
XML filen är ca 2MB, men jag plockar bara ut den data jag ska använda och sparar i mitt dataset. Så det jag har i datasetet är inte så stort.
Det är bara en xml fil, men den uppdateras emellanåt med en webservice så i princip kan olika personer få olika data i sitt dataset.
xml filen innehåller bara lite text. T.ex den jag nyss har kört är på 4500 rader, 224 KB.
Utdrag ur xml filen som är sparad ifrån datasetet:
<Documents>
<NodeID>Doc_121558</NodeID>
<Type>Doc</Type>
<Documentname>Environmental Checklist</Documentname>
<Parent>Node_1550381</Parent>
<AllParents>Node_1550381</AllParents>
<Comment>Checklist for project related EGD issues</Comment>
<CustomerID />
<DocumentID>EHDS743659</DocumentID>
<Revision>1</Revision>
<Data-version>-.1</Data-version>
<Status>Docstatus_4332</Status>
<Transmittal>Tech, Preliminary</Transmittal>
<SubmitType />
<SubmittalReason />
<SubmittalTime />
<ReceiveResponse />
<ReceivedTime />
<CommentInSource />
</Documents>
Okej, jag tycker att lägga det i en session låter som en dålig ide.
Jag hade nog egentligen röstat för en databas här.
Jag har ingen erfarenhet av det du vill göra, men utifrån det jag vet just nu är att jag hade lagrat det inlästa dataset'et i HttpApplication dvs det ligger statiskt över hela applikationen, du säger att ett par webservices ändrar i den ibland, du kan då lägga dig och lyssna på ett event när filen blir uppdaterad och då läser du om xmlfilen och uppdaterar ditt dataset.
För dataset:et i applikationen blir readonly antar jag?
Sedan om du funderar på framtiden, lägger varje serviceanrop till saker i xml filen så lär den växa ganska fort då är frågan om du inte skall använda dig av en databas istället.
Har läst en hel del nu och det jag kommit fram till är att det bästa att välja på verkar vara HttpApplicationState eller HttpCache om jag förstått det bäst.
Men en följdfråga är om jag väljer att spara datasetet i någon av dom, är dom globala då?
Viktigt för mig då varje användare kommer ha ett eget dataset.
Jaha skall varje användare ha sitt eget.. då är nog inte applicationstate eller httpcache. Som gäller. Men det känns ju riktigt surt att varje användare skulle behöva lägga in ca 2mb filer dataset i minnet :|.
Det går absolut inte med en databas menar du? Måste det vara xmlfiler? :S
Ett annat alternativ är ju att läsa in xml filen varje gång den behövs.
Förtydligande:
XML filen som är 2MB läses in när man kommer till sidan. Men den läggs inte i en session som den är utan strippas ner till ca 10-20% av originalstorleken.
Sidan körs på en NAS ute på ett bygge och har inte SQL installerat.
Endast 4-5 st användare av applikationen.
Är det så små mängder ska du inte behöva tänka på prestanda nå vidare.
Du kan enkelt använda cache objektet för sessioner också. bara lägga till sessionsID:et till nyckeln. Det fina med cache objektet är att du kan styra hur länge cache tiden ska vara per objekt lagrat.
Sen kan du kika Cache Dependancy om du vill snyggt kunna tvinga en uppdatering av innehållet.
Exempel för cachening / lagring av dataset i 900 sekunder.
string uniktIdFörEnAnvändare = "dokData_" + Session.SessionID;
Cache.Insert(uniktIdFörEnAnvändare , datasetDelen, null,DateTime.Now.AddSeconds(900), TimeSpan.Zero);
_______
Ska helt klart läsa mer om Cache.
Jag tackar för tipset. (y)
Ska helt klart läsa mer om Cache.
Jag tackar för tipset. (y)