Ik wil de performance van mijn webapplicatie verhogen, dus ik dacht bepaalde waardes uit de database te cachen.
Het idee is als volgt: Een medewerker kan zowel een assistent als een chef hebben en beide waardes komen uit dezelfde tabel. (Empoyee). Dus dacht ik om die lijst te cachen.
Nu cached hij echter ook, om voor mij onduidelijke redenen de huidige selected value.
En de functie die het geheel vult:
Volgens mij doe ik het cachen "by the book" , maar hij cached dus ook de selected value van de dropdown... en ik niet dnap....
Het idee is als volgt: Een medewerker kan zowel een assistent als een chef hebben en beide waardes komen uit dezelfde tabel. (Empoyee). Dus dacht ik om die lijst te cachen.
Nu cached hij echter ook, om voor mij onduidelijke redenen de huidige selected value.
Visual Basic .NET:
1
2
3
4
5
| iactShared.DropDown.GetEmployeeList(Me.drpBoss, True) iactShared.DropDown.GetEmployeeList(Me.drpAssistent, True) ' ... Me.drpAssistent.SelectedValue = insEmployee._AssistentId Me.drpBoss.SelectedValue = insEmployee._SuperiorId |
En de functie die het geheel vult:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| Public Shared Sub GetEmployeeList(ByRef DropDown As System.Web.UI.WebControls.DropDownList, Optional ByVal InsertEmpty As Boolean = False, Optional ByVal DepartmentId As Integer = 0, Optional ByVal Defaulttext As String = "") IACTLibrary.TraceWrite.WithoutLevel("iactshared.DropDown.GetEmployeeList", "Begin") IACTLibrary.TraceWrite.WithoutLevel("iactshared.DropDown.GetEmployeeList:DepartmentId", DepartmentId) Dim drpItems As ArrayList Dim strCacheName As String = "GetEmployeeList" & "|" & DepartmentId Dim intCacheDuration As Integer = Settings.Caching.Dropdown.CacheDuration DropDown.Items.Clear() If InsertEmpty Then iactShared.DropDown.InsertEmpty(DropDown, Defaulttext) drpItems = HttpContext.Current.Cache(strCacheName) If drpItems Is Nothing Or True Then 'cache temporary turned off ' items not found in cache IACTLibrary.TraceWarn.WithoutLevel("GetEmployeeList", "Not found in cache, retrieving from database") drpItems = New ArrayList ' place to store the items in Dim EmployeeAdapter As New dsWylanceTableAdapters.dsEmployeeTableAdapter Dim EmployeeData As dsWylance.dsEmployeeDataTable Dim strFullname As String = "" If Not DepartmentId > 0 Then IACTLibrary.TraceWrite.WithoutLevel("iactshared.DropDown.GetEmployeeList:DepartmentId=0", "Department is 0 or < 0, getting all employees") EmployeeData = EmployeeAdapter.GetEmployeeList() Else IACTLibrary.TraceWrite.WithoutLevel("iactshared.DropDown.GetEmployeeList:DepartmentId>0", "Getting all employees for this company") EmployeeData = EmployeeAdapter.GetEmployeeByDepartment(DepartmentId) End If IACTLibrary.TraceWrite.WithoutLevel("iactshared.DropDown.GetEmployeeList:EmployeeData", EmployeeData.Count) For Each row As dsWylance.dsEmployeeRow In EmployeeData strFullname = row.Surname & ", " & row.Firstname Dim s As New ListItem(strFullname, row.Id) DropDown.Items.Add(s) drpItems.Add(s) Next HttpContext.Current.Cache.Insert(strCacheName, drpItems, Nothing, DateTime.Now.AddSeconds(intCacheDuration), System.Web.Caching.Cache.NoSlidingExpiration) Else ' item was found in cache IACTLibrary.TraceWrite.WithoutLevel("GetEmployeeList", "Retrieving values from cache") For Each s As ListItem In drpItems DropDown.Items.Add(s) Next End If IACTLibrary.TraceWrite.WithoutLevel("iactshared.DropDown.GetEmployeeList", "End") End Sub |
Volgens mij doe ik het cachen "by the book" , maar hij cached dus ook de selected value van de dropdown... en ik niet dnap....
[ Voor 72% gewijzigd door jp op 05-12-2006 14:16 ]