アイテムの取得について注意とか
アイテムの取得についてのネタ。
たとえばID=1のアイテムを取得したい場合、以下のようなコードが考えられます。
SPList MyList;
SPListItem MyItem;
MyItem = MyList.Items[0]; //①
MyItem = MyList.GetItemById(1); //②
MyItem = MyList.Items.GetItemById(1); //③
①はアイテムコレクションのインデックスで取得。
でもインデックスがいくつかなんて普通分かりませんよね!w
Items[index]は全アイテムを順に処理する時とかにしか使いません。(私は)
②と③は一見同じ物に見えますが負荷は全く違います。
③は危険です!(笑)
アイテムがたくさんあるリストだと、ものすごくパフォーマンが悪くなります。
おそらく③はアイテムコレクションをすべて取得してから指定のIDのアイテムを取得しているのでないかと。。。
下手するとOutOfMemoryエラーが発生します。(リストでかすぎ?^^;)
小さいリストならそこまで問題はないとは思いますが。
が、もう一つ問題。
MyList.Itemsコレクションにはフォルダは含まれません。
つまりID=1がフォルダの場合、②ならアイテムを取得できますが③では取得できません。
MyList.Folders.GetItemById(1)でなら取得出来ます。
フォルダもリストアイテムなのに……(ー"ー)
ついでにアイテム数のカウントについて。
リストにアイテムが10個、フォルダが1個登録されている場合
MyList.Items.Count; → 10
MyList.ItemCount; → 11
MyList.Folders.Count; → 1
となります。
上の現象から考えると当然ですかね。
たとえばID=1のアイテムを取得したい場合、以下のようなコードが考えられます。
SPList MyList;
SPListItem MyItem;
MyItem = MyList.Items[0]; //①
MyItem = MyList.GetItemById(1); //②
MyItem = MyList.Items.GetItemById(1); //③
①はアイテムコレクションのインデックスで取得。
でもインデックスがいくつかなんて普通分かりませんよね!w
Items[index]は全アイテムを順に処理する時とかにしか使いません。(私は)
②と③は一見同じ物に見えますが負荷は全く違います。
③は危険です!(笑)
アイテムがたくさんあるリストだと、ものすごくパフォーマンが悪くなります。
おそらく③はアイテムコレクションをすべて取得してから指定のIDのアイテムを取得しているのでないかと。。。
下手するとOutOfMemoryエラーが発生します。(リストでかすぎ?^^;)
小さいリストならそこまで問題はないとは思いますが。
が、もう一つ問題。
MyList.Itemsコレクションにはフォルダは含まれません。
つまりID=1がフォルダの場合、②ならアイテムを取得できますが③では取得できません。
MyList.Folders.GetItemById(1)でなら取得出来ます。
フォルダもリストアイテムなのに……(ー"ー)
ついでにアイテム数のカウントについて。
リストにアイテムが10個、フォルダが1個登録されている場合
MyList.Items.Count; → 10
MyList.ItemCount; → 11
MyList.Folders.Count; → 1
となります。
上の現象から考えると当然ですかね。
スポンサーサイト