webForumDet fria alternativet

ASP.NET - samlade koder

15 svar · 645 visningar · startad av m_soderlund

m_soderlundMedlem sedan sep. 20026 425 inlägg
#1

Jag gjorde för ett par dagar sen i ordning en sida med koder som jag använder mer frekvent i ASP.NET. Sidan kan ni hitta här: https://www.dileno.hel.nu/aspnet

Det är inget speciellt, men kan väl så funktionellt. :)

SPiNMedlem sedan mars 20007 896 inlägg
#2

Vad använder du för teckenkodning? Svenska tecken fungerar inte för mig med Mozilla Fb, sätt charset till ISO-8859-1 så bör det bli bättre. :)

WalkerMedlem sedan okt. 2002188 inlägg
#3

Hej

Trevliga sida.

Jag använder ett program som heter Code Library som är suveränt enligt mig. Det fina med detta program är att man kan exportera allt som man lagrar i det och synka med exempelvis en webbservices. Nu vet jag inte om det finns någon sådan har webbtjänsten men det hade varit grymt trevligt om man var ett gäng som knopade ihop en sida där man sedan kunde skicka upp sina tips och dokument, sen kan man ladda ner dem och importera dem till code lib om man vill ha dem där.

Kika på programmet, webbsidan är lite weird men när man väl installerat det så förstår man hur det fungerar.

/w

PatrikBMedlem sedan mars 20002 836 inlägg
#4

Aja baja m_soderlund, ;)

inte ska du väl använda Response.Write inne i olik klasser ....

I ASP.NET är det väl tänkt att man ska gå ifrån Response.Write (Classic ASP teknik) och binda sådan data till andra kontroller som tex en Literal, en Label etc.

cya,
/PatrikB

m_soderlundMedlem sedan sep. 20026 425 inlägg
#5

En del av koden i pagingen skrev jag precis efter att jag börjat med ASP.NET, PatrikB, och således hade jag inte så stor kunskap i om jag skulle använda Response.Write eller ej. :)
Jag har ännu inte fixat koden, har ej använt den på flera månader, men när jag behöver en bättre kod så fixar jag det (om inte nån annan fixar det först ;)). :)

GladhMedlem sedan maj 20012 812 inlägg
#6

Då kan jag lägga till att man skall göra Dispose() på de objekt som har en sådan funktion inlagd.

Hört rykten om att om man gör Close() så görs Dispose() och om man gör Dispose() så görs Cloes(). Har dock inte lyckas få det bekräftat. Så så länge är mitt råd att alltid göra Dispose() på objekt som har en sådan method.

- M

NETworkMedlem sedan juni 20011 732 inlägg
#7

Gladh skrev:

Då kan jag lägga till att man skall göra Dispose() på de objekt som har en sådan funktion inlagd.
- M

Tar inte GC:n hand om det egentligen?

Engine^Medlem sedan dec. 20003 887 inlägg
#8

Gladh skrev:

Hört rykten om att om man gör Close() så görs Dispose() och om man gör Dispose() så görs Cloes(). Har dock inte lyckas få det bekräftat. Så så länge är mitt råd att alltid göra Dispose() på objekt som har en sådan method.

- M

MSDN skrev:

Because the Dispose method must be called explicitly, objects that implement IDisposable must also implement a finalizer to handle freeing resources when Dispose is not called. By default, the garbage collector will automatically call an object's finalizer prior to reclaiming its memory. However, once the Dispose method has been called, it is typically unnecessary for the garbage collector to call the disposed object's finalizer. To prevent automatic finalization, Dispose implementations can call the GC.SuppressFinalize method.

Den första meningen tolkar jag att ett anrop till Close() inte innebär att Dispose() körs, men ett anrop till Dispose() ger en implicit Close() på objektet (om metoden finns). Detta ska då hända i Object.Finalize() metoden om jag förstår det riktigt. Vilket, som NETwork sa, sker i GC:n.

nikoMedlem sedan juni 20022 599 inlägg
#9

Engine^ skrev:

Den första meningen tolkar jag att ett anrop till Close() inte innebär att Dispose() körs, men ett anrop till Dispose() ger en implicit Close() på objektet (om metoden finns).

Nja. Dispose är ju bara en tom stubbfunktion i IDisposable. Om Dispose anropar Close eller tvärtom avgör man själv när man skriver implementationen. Är det sen frågan om klasser man inte skrivit själv så får man helt enkelt titta i dokumentationen/experimentera för att ta reda på vad som gäller från fall till fall.

GladhMedlem sedan maj 20012 812 inlägg
#10

Tar inte GC:n hand om det egentligen?

Jo.. men...

För att göra en lång histora om GC och minnet i .NET så är det så här.

Om ett .NET objekt innehåller referenser till externa objekt, så som filhantering, databaser osv osv.. Så försvinner inte objektet helt och hållet första gången GC körs, utan objekt läggs i en speciell lista (så man inte tar bort referenserna till de externa objekten). Och nästa gång GC körs så tas objektet bort helt.

Det betyder att det behövs 2 GC för att en SqlConnection skall försvinna helt från minnet. Om du då själv gör en Dispose() så tar den hand om den "Första GC" och det endast kommer att behöva en GC för att objektet skall försvinna helt.

Vilket gör att man spara minne.

Nja. Dispose är ju bara en tom stubbfunktion i IDisposable. Om Dispose anropar Close eller tvärtom avgör man själv när man skriver implementationen. Är det sen frågan om klasser man inte skrivit själv så får man helt enkelt titta i dokumentationen/experimentera för att ta reda på vad som gäller från fall till fall.

Det stämmer, det är dock kutym att göra på något sätt. Själv fick jag lära mig att man gör en Dispose i Close om det är möjligt. Det jag tänkte mest på var hur MS har implementerat sina Close(). Alltså om det räcker med att kalla på close() och så kallas Dispose() automatiskt.

Men helt klart är att det är skillnad från leverantör till leverantör.

- M

nikoMedlem sedan juni 20022 599 inlägg
#11

Gladh skrev:

Det stämmer, det är dock kutym att göra på något sätt. Själv fick jag lära mig att man gör en Dispose i Close om det är möjligt.

Ja, det är en bra fråga. Jag uppfattar nog också att man ofta gör en Dispose, i Close (och ibland tom inget annat). Men samtdigt kan klasser representera väldigt olika saker: kunder, filhandtag, COM-portar, bankkonton osv .., så den exakta innebörden/tolkningen av Close kan nog variera väldigt mycket från fall till fall.

Två rekommendation angående Dispose/Close som jag läst hos J. Richter:

1. Både Dispose och Close ska gå att anropa mer än en gång utan att ett fel kastas.

2. Undvik (om möjligt) behovet av att anropa Dispose och Close explicit. Se istället till att det görs i Finalize.

Engine^Medlem sedan dec. 20003 887 inlägg
#12

Humm... kan man alltså tolka Dispose som en flagga, och när GC körs kontrolleras det ifall Dispose har anropats för objektet och då körs Finalize på det. Problem uppstår ju när det är unmanaged code med i spelet, men då är det ju "bara" att hålla sig till J. Richters riktlinjer.

Referenser
GC Class
Object.Finalize Method
IDisposable.Dispose Method

Efter att ha läst igenom dessa kan jag säga att det är inte speciellt enkelt att följa resonemanget över ett objekts livstråd. Finalize tycker jag gör det hela väldigt rörigt. Men det är ju på det här sättet man lär sig något. :)

m_soderlundMedlem sedan sep. 20026 425 inlägg
#13

SPiN skrev:

Vad använder du för teckenkodning? Svenska tecken fungerar inte för mig med Mozilla Fb, sätt charset till ISO-8859-1 så bör det bli bättre. :)

Jag hade redan från början satt charset till ISO-8859-1. Konstigt.

m_soderlundMedlem sedan sep. 20026 425 inlägg
#14

PatrikB skrev:

Aja baja m_soderlund, ;)

inte ska du väl använda Response.Write inne i olik klasser ....

I ASP.NET är det väl tänkt att man ska gå ifrån Response.Write (Classic ASP teknik) och binda sådan data till andra kontroller som tex en Literal, en Label etc.

cya,
/PatrikB

Nu är allt sånt fixat! Med lite hjälp av en StringBuilder (tack Dino) och en literal så fixade jag koden så att den blev lite bättre (pagingen). Dessutom så lade jag till en repeater i stället för en datalist.

DinoMedlem sedan sep. 20011 914 inlägg
#15

Angående din stringbuilder. Ändra till.

For Pagecounter = 1 To pagedData.PageCount
   If Not pagedData.CurrentPageIndex = PageCounter-1 Then
      sb.Append("<a href=""default.aspx?page=")
      sb.Append(PageCounter-1)
      sb.Append(""">")
      sb.Append(PageCounter)
      sb.Append("</a>")
   Else
      If Not RecsCount <= pagedData.PageSize Then
         sb.Append(Pagecounter)
         sb.Append(" ")
      End If
   End If
Next
m_soderlundMedlem sedan sep. 20026 425 inlägg
#16

Tack Dino, jag misstänkte nästan att man skulle göra så.. :)
Fixat!

Förresten, ser ni att jag använder Dispose() i koden för pagingen? :)

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