Blog » GetItemById() vs GetFolder()
Aktualna ocena: 5 (0)

GetItemById() vs GetFolder()

 
GetItemById() vs GetFolder()
Operując na folderach, które tworzone były na listach w SharePoint stanąłem przed wyborem metody do ich pobierania. Miałem dostępne: GetItemById i GetFolder. Nie byłem w stanie ocenić, która jest lepsza więc przeprowadziłem testy. O rezultatach i wnioskach można przeczytać w tym poście.

Aby przetestować obie metody napisałem prostego webparta, którego zadaniem było odpytywanie listy o foldery (zapytanie wykonywane było tyle razy ile było folderów na liście).  W jednym zdarzeniu wykonywane było pobieranie obiektów SPFolder obiema metodami:

- GetItemById()
           
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            foreach (KeyValuePair<int, string> item in listFolder)
            {
                SPList listTemp = SPContext.Current.Web.Lists["Foldery"];
                SPFolder folder = listTemp.GetItemById(item.Key).Folder;
            }
            stopwatch.Stop();
            lTime1.Text = string.Format("Metoda GetItemById: {0}", stopwatch.ElapsedTicks.ToString());

- GetFolder()

            Stopwatch stopwatch1 = new Stopwatch();
            stopwatch1.Start();
            foreach (KeyValuePair<int, string> item in listFolder)
            {
                string documentPath = libraryPath + "/" + item.Value;
                SPFolder folder = SPContext.Current.Web.GetFolder(documentPath);
            }
            stopwatch1.Stop();
            lTime2.Text = string.Format("Metoda GetFolder: {0}", stopwatch1.ElapsedTicks.ToString());

W przypadku pierwszej metody GetItemById sprawdziłem też jak zachowa się gdy wyciągnę tworzenie listy przed blok foreach. Kod po modyfikacji wyglądał następująco:

            SPList listTemp = SPContext.Current.Web.Lists["Foldery"];
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            foreach (KeyValuePair<int, string> item in listFolder)
            {
                SPFolder folder = listTemp.GetItemById(item.Key).Folder;
            }
            stopwatch.Stop();
            lTime1.Text = string.Format("Metoda GetItemById: {0}", stopwatch.ElapsedTicks.ToString());

Poniżej została zamieszczona tabelka z czasami podanymi w Ticks i wykresy wydajności tych dwóch metod.



Wyniki same mówią za siebie - wybrałem GetFolder. Zaskakujące może być to, że tworzenie obiektu SPList przed blokiem foreach przyniosło bardzo małą poprawę wydajności (wykres 2).


Dodany: 2009-10-04 17:07:58 przez Michał Nikołajuk | Wypowiedzi: 0
Dodaj do MySpace Dodaj do Twitter Dodaj do Yahoo Bookmarks Dodaj do Facebook Dodaj do Google Bookmarks Dodaj do Yahoo MyWeb
Komentarze
Wpis nie posiada komentarzy.
Zostaw komentarz Subskrybuj



 Security code