---
title: "Förbättra struktur"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/53844-förbättra-struktur"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "icaaq"
published: "2002-09-21T07:59:18.000Z"
updated: "2002-09-21T11:07:58.000Z"
replies: 6
views: 259
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/53844-förbättra-struktur"
---

# Förbättra struktur

## #1 — icaaq, 2002-09-21T07:59Z

Nu har jag gjort en kalender som jag ska använda till en sorts dagbok :)
Nu vill jag att ni här på wF ska granska den i detalj och komma med synpunkter på hur ni kanske hade gjort

Varsogoda:

```
[red]
void doMyCalender()
		{
			DateTime dteDate = DateTime.Now.Date;
			
			if (Request.QueryString["dteDate"] != "")
			{
				dteDate = Convert.ToDateTime(Request.QueryString["dteDate"]);
			}
			
			// Testar att göra en kalender
			int intDaysInMonth = DateTime.DaysInMonth(dteDate.Year, dteDate.Month);
			CultureInfo cultSwe = new CultureInfo("sv-SE");
			
			// Börjar att bygga en table
			Response.Write	("<Table id=\"Table1\" cellSpacing=\"0\" cellPadding=\"3\" width=\"300\" border=\"1\">\n" + 
							"<TR><TD colspan=\"3\">"+ dteDate.ToString("y"));
			doLinks(dteDate);
			Response.Write("</TD>");
			int i = 1;
			do
			{	
				dteDate =new DateTime(dteDate.Year, dteDate.Month, i);
				string strColor;
				if (dteDate.DayOfWeek.ToString("d") == "0")
				{
					strColor = "Peachpuff";
				}
				else if(dteDate.Date.ToString() == System.DateTime.Today.ToString())
				{
					strColor = "LightSteelBlue";
				}
				else
				{
					strColor = "White";
				}
					
				Response.Write ("<TR  bgColor=\""+strColor+"\">\n");
				Response.Write ("<TD Width=\"10%\">" + dteDate.ToString("dd", cultSwe)+"</TD><TD Width=\"90%\">"+ dteDate.ToString("dddd", cultSwe) +"</TD>");
				Response.Write ("</TR>\n");
				i ++;
			}while (i <= intDaysInMonth);
			
			Response.Write ("</Table>");
		}
		 public void doLinks(DateTime dteDate)
		{		
			Response.Write("<a href=\"default.aspx?dteDate="+dteDate.AddMonths(-1)+ "\" alt=\""+dteDate.AddMonths(-1)+ "\">&laquo;</a> <a href=\"default.aspx?dteDate="+dteDate.AddMonths(1)+ "\">&raquo;</a>");
		}
[/red]
```

Permalänk: https://www.webforum.nu/p/53844

## #2 — developer, 2002-09-21T09:43Z

OK, här kommer mina funderingar :)

Prestandamässigt är det bättre att inte allokera så mycket på heapen som du gör. Tänk på följande:

1\. Återanvänd samma kopia av cultSwe. Lägg cultSwe som en statisk medlemsvariabel eller på något annat bra ställe så den inte skapas om hela tiden. Som du gör nu kommer du skapa ett sådant objekt ca 30 gånger för att skriva ut en kalender. Åtminstone borde du skapa den på bara 1 ställe överst i din funktion.

2\. Samma sak med dteDate, där gör du också ca 30 allokeringar på heapen som inte är nödvändiga. Skapa dteDate ovanför do-slingan. Sedan gör du AddDays(1) sist i loopen istället.

3\. Du jämför datum som strängar i if-satsen. Gör istället 

```
if (dteDate.DayOfWeek == 0)
{
	strColor = "Peachpuff";
}
else if(dteDate.Date == System.DateTime.Today)
{
	strColor = "LightSteelBlue";
}
else
{
	strColor = "White";
}
```

4\. Inom Response.Write loopen gör du en flera gånger sträng-sammanslagningar. Det kommer att innebära allokeringar av System.String som du kan undvika. Gör istället Response.Write flera gånger eftersom ett funktionsanrop har lägre kostnad än allokering. Läs punkt 7 i <http://samples.gotdotnet.com/quickstart/aspplus/doc/perftuning.aspx>

Permalänk: https://www.webforum.nu/p/793457

## #3 — NETwork, 2002-09-21T10:02Z

Det gör ont i mitt .net-hjärta när jag ser hur du bygger upp tabellen med response.write. ;) Titta på det här exemplet så får du ett tips på hur du ska göra:

<http://samples.gotdotnet.com/quickstart/aspplus/samples/webforms/ctrlref/webctrl/table/doc_table.aspx>

Permalänk: https://www.webforum.nu/p/793470

## #4 — NETwork, 2002-09-21T10:05Z

Sedan kan man ju förstås fråga sig varför du inte använder dig av den inbyggda kalenderkontrollen... där finns ju alla funktioner du behöver färdiga att användas och mer ändå:

Kalender: <http://samples.gotdotnet.com/quickstart/aspplus/samples/webforms/ctrlref/webctrl/Calendar/VB/Calendar5.aspx>
Kod: <http://samples.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/ctrlref/webctrl/Calendar/Calendar5.src&file=CS\calendar5.aspx&font=3>

Permalänk: https://www.webforum.nu/p/793472

## #5 — icaaq, 2002-09-21T10:18Z

Tack

> 2\. Samma sak med dteDate, där gör du också ca 30 allokeringar på heapen som inte är nödvändiga. Skapa dteDate ovanför do-slingan. Sedan gör du AddDays(1) sist i loopen istället.

Hur ska jag då skriva vid while?

NETwork--- Jag ska kolla in det där och återkommer sen med resultat ;)

Permalänk: https://www.webforum.nu/p/793478

## #6 — icaaq, 2002-09-21T10:22Z

> **NETwork skrev:**
>
> Sedan kan man ju förstås fråga sig varför du inte använder dig av den inbyggda kalenderkontrollen... där finns ju alla funktioner du behöver färdiga att användas och mer ändå:
> 
> Kalender: <http://samples.gotdotnet.com/quickstart/aspplus/samples/webforms/ctrlref/webctrl/Calendar/VB/Calendar5.aspx>
> Kod: <http://samples.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/ctrlref/webctrl/Calendar/Calendar5.src&file=CS\calendar5.aspx&font=3>

För jag vill inte ha en sån modell ;) Skämt ossidå så kommer jag nog att använda en sådan senare, men för att jag ska lära mig detta nån gång testade jag att göra en egen.

Permalänk: https://www.webforum.nu/p/793480

## #7 — icaaq, 2002-09-21T11:07Z

Ok nu har jag möblerat om lite :) Och jag kommer att studera länken om tabellbygnationen under dagen.
Men ni kan väl kolla vad jag gjort så länge:

```
[red]
void doMyCalender()
		{
			// Testar att göra en kalender
			DateTime dteDate = DateTime.Now.Date;
			CultureInfo cultSwe = new CultureInfo("sv-SE");
			if (Request.QueryString["dteDate"] != null)
			{
				dteDate = Convert.ToDateTime(Request.QueryString["dteDate"]);
			}
			int intDaysInMonth = DateTime.DaysInMonth(dteDate.Year, dteDate.Month);
			// Börjar att bygga en tabel.
			Response.Write("<Table id=\"Table1\" cellSpacing=\"0\" cellPadding=\"3\" width=\"300\" border=\"1\">\n");
			Response.Write("<TR><TD colspan=\"3\">");
			Response.Write(dteDate.ToString("y"));
			doLinks(dteDate);
			Response.Write("</TD>");
			string strColor;
			DateTime dteDay = new DateTime(dteDate.Year, dteDate.Month, 1);
			int i = 0;
			do
			{					
				if (dteDay.DayOfWeek == 0)
				{
					strColor = "Peachpuff";
				}
				else if(dteDay.Date == System.DateTime.Today)
				{
					strColor = "LightSteelBlue";
				}
				else
				{
					strColor = "White";
				}
					
				Response.Write ("<TR  bgColor=\""+strColor+"\">\n");
				Response.Write ("<TD Width=\"10%\">" + dteDay.ToString("dd", cultSwe)+"</TD><TD Width=\"90%\">"+ dteDay.ToString("dddd", cultSwe) +"</TD>");
				Response.Write ("</TR>\n");
				i ++;
				dteDay = dteDay.AddDays(1);
			}while (i <= intDaysInMonth);			
			Response.Write ("</Table>");
		}
		 public void doLinks(DateTime dteDate)
		{		
			 
			Response.Write("<a href=\"default.aspx?dteDate="+dteDate.AddMonths(-1)+ "\" alt=\""+dteDate.AddMonths(-1)+ "\">&laquo;</a> <a href=\"default.aspx?dteDate="+dteDate.AddMonths(1)+ "\">&raquo;</a>");
		}[/red]
```

Nu börjar det bli roligt :e

Permalänk: https://www.webforum.nu/p/793506

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/53844-förbättra-struktur
