webForumDet fria alternativet

bra xml lösning?

.NETur .NET

8 svar · 367 visningar · startad av DavidB

DavidBMedlem sedan jan. 20001 372 inlägg
#1

Har skrivit ihop följande kod, det jag undrar nu är hur bra den är när det gäller prestanda. Eftersom den hämtar texter från en xml fil så kan det bli så att den körs ganska så många gånger även på samma sida:

string _lang;
string _word;

_lang = "en";
_word = "hi";

XmlTextReader reader = new XmlTextReader(Server.MapPath("text.xml"));

while (reader.Read()) {
	if(reader.NodeType == XmlNodeType.Element){
		if(reader.Name == "text"){
			reader.MoveToNextAttribute();
			if(reader.Name == "language" && reader.Value == _lang){
				reader.MoveToNextAttribute();
					if(reader.Name == "word" && reader.Value == _word){
						reader.MoveToNextAttribute();
						Response.Write("" + reader.Value + "<br>");
					}
			}
		}
	}
}
reader.Close();

text.xml:

<?xml version='1.0'?>
<sitetext>
  <text language="en" word="help" text="blablabla"/>
  <text language="se" word="help" text="blablablabalbal"/>
  <text language="en" word="welcome" text="sdasfsafsaf"/>
  <text language="se" word="welcome" text="saddas"/>
</sitetext>

Finns det något bättre alternativ så att det tar mindre resurser? Eller om det går att göra några ändringar så det går snabbare?

nikoMedlem sedan juni 20022 599 inlägg
#2

Om xml-filen ändras betydligt mer sällan än den läses så borde det vara rätt smart att cacha för att slippa diskläsningarna. Du kan antingen lägga koden i en ascx-fil och ange en "OutPutCache Duration" eller ännu smartare: använda Cache-objektet och sätta en dependency så att omcachning sker när filen ändras.

http://www.fawcette.com/Archives/premier/mgznarch/vbpj/2001/11nov01/an0111/an0111-1.asp

DavidBMedlem sedan jan. 20001 372 inlägg
#3

får testa det

men borde inte det ta upp ganska mycket minne på servern? om xml filen innehåller en väldigt massa text?

nikoMedlem sedan juni 20022 599 inlägg
#4

men borde inte det ta upp ganska mycket minne på servern? om xml filen innehåller en väldigt massa text?

Jo, naturligtvis så tar det i princip lika mycket virtuellt minne som filen är stor. Men det är ju den eviga avvägningen man måste göra. Vill man få snabbare exekvering genom att minska läsningar mot långsamma media (diskar tex) så går det åt mer minne. Men om filen är några kb stor och accessas väldigt ofta så .. ?

DavidBMedlem sedan jan. 20001 372 inlägg
#5

kom och tänka på en sak till:

ska jag lägga all text i en xml fil eller skall jag ha en fil för varje språk?

spangoMedlem sedan juni 20008 205 inlägg
#6

Jag röstar för en fil för varje språk... när du kommer upp i 34 språk (vilket naturligtvis kommer att ske :OO ;) ) är det inte så kul att ha allt samlat i samma fil. Dessutom blir inläsningen mindre tungrodd...

Tillägg

DavidB skrev:

Eftersom den hämtar texter från en xml fil så kan det bli så att den körs ganska så många gånger även på samma sida:

Graaaah! :o *host* Vore det inte mycket bättre att läsa in filen till en datastruktur (någon slags Map eller vad de nu heter) som du sedan plockar fram orden ur? Att läsa filen en gång för varje fras man ska ha fram låter inte det minsta effektivt.

DavidBMedlem sedan jan. 20001 372 inlägg
#7

tycker inte heller det är så effektivt, men hur gör man det där du skrev då? :q

spangoMedlem sedan juni 20008 205 inlägg
#8

Kika på IDictionary...

DavidBMedlem sedan jan. 20001 372 inlägg
#9

säger inte mig så jättemycket men ska sätta mig och försöka :)

129 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)