fc2ブログ

2010-03

アイテムの取得について注意とか

アイテムの取得についてのネタ。


たとえば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

となります。

上の現象から考えると当然ですかね。


スポンサーサイト



NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

プロフィール

柚木

Author:柚木
コメント・トラックバックなどお気軽にどうぞ(^^)

連絡先:yuzuki-sharepoint★mail.goo.ne.jp(★を@に変換)

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

リスト・ライブラリ (9)
検索関連 (3)
管理設定 (0)
開発 (14)
その他 (1)
未分類 (0)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる