SharePoint 2010のクライアントオブジェクトモデルのパフォーマンスについて
7965 ワード
声明:本文は私がSteve Peschkaのいくつかの列の文章を読んだ後のいくつかの感じです.クライアント・オブジェクト・モデルに興味がある場合は、http://blogs.technet.com/b/speschka/archive/2009/11/01/using-the-sharepoint-2010-client-object-model-part-1.aspxの列を読むことをお勧めします.
SharePointのクライアント・オブジェクト・モデルに影響を与える重要な2つの要因は、データの転送量の大きさと、サーバとのデータの転送回数です.ここでは、Fiddler(http://www.fiddler2.com/fiddler2/)ツールを使用して説明します.
例1:オブジェクトモデルを使用して、現在のサイトのすべてのリストのタイトルを取得します.
前:
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Fiddlerデータ:
次の操作を行います.
Fiddlerデータ
比較:
前
を選択します.
Request Count:
4
4
Bytes Sent:
3.294
3.353
Bytes Received:
81.989
14.526
Sequence (clock) time (s)
1.357
0.936
例2:現在のサイトの全てのグループ(ID属性)と、グループ内のユーザ(ユーザのTitle属性)を取得する.
前:
Fiddlerデータ:
次の操作を行います.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Fiddlerデータ:
比較:
前
を選択します.
Request Count:
32
4
Bytes Sent:
37.441
3.379
Bytes Received:
38.065
8.119
Sequence (clock) time (s)
2.204
0.956
結論:SharePointクライアントオブジェクトモデルを使用する場合:
1.必要なデータ、または列のみをクエリーします.
2.サーバとの間でデータをやり取りする回数を最小限に抑える.
SharePointのクライアント・オブジェクト・モデルに影響を与える重要な2つの要因は、データの転送量の大きさと、サーバとのデータの転送回数です.ここでは、Fiddler(http://www.fiddler2.com/fiddler2/)ツールを使用して説明します.
例1:オブジェクトモデルを使用して、現在のサイトのすべてのリストのタイトルを取得します.
前:
public void QueryAllList()
{
Web web = ctx.Web;
var lists = ctx.LoadQuery(web.Lists);
ctx.ExecuteQuery();
foreach (List lst in lists)
{
Console.WriteLine("Title:{0}",
lst.Title);
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Fiddlerデータ:
次の操作を行います.
public void QueryAllList()
{
Web web = ctx.Web;
var lists = ctx.LoadQuery(web.Lists.Include(
lst=>lst.Title));
ctx.ExecuteQuery();
foreach (List lst in lists)
{
Console.WriteLine("Title:{0}",
lst.Title);
}
}
Fiddlerデータ
比較:
前
を選択します.
Request Count:
4
4
Bytes Sent:
3.294
3.353
Bytes Received:
81.989
14.526
Sequence (clock) time (s)
1.357
0.936
例2:現在のサイトの全てのグループ(ID属性)と、グループ内のユーザ(ユーザのTitle属性)を取得する.
前:
public void GetAllUsersInGroups()
{
ctx.Load(ctx.Web.SiteGroups);
ctx.ExecuteQuery();
foreach (Group currentGroup in ctx.Web.SiteGroups)
{
ctx.Load(currentGroup);
ctx.ExecuteQuery();
try
{
ctx.Load(currentGroup.Users);
ctx.ExecuteQuery();
foreach (User currentUser in currentGroup.Users)
{
Console.WriteLine(currentGroup.Id + "--" + currentUser.Title);
}
}
catch { };
}
}
Fiddlerデータ:
次の操作を行います.
public void GetAllUsersInGroups()
{
ctx.Load(ctx.Web.SiteGroups,
grps => grps.Include(
grp => grp.Id,
grp => grp.Users.Include(usr => usr.Title)));
ctx.ExecuteQuery();
foreach (Group currentGroup in ctx.Web.SiteGroups)
{
foreach (User usr in currentGroup.Users)
{
Console.WriteLine(currentGroup.Id + "--" + usr.Title);
}
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Fiddlerデータ:
比較:
前
を選択します.
Request Count:
32
4
Bytes Sent:
37.441
3.379
Bytes Received:
38.065
8.119
Sequence (clock) time (s)
2.204
0.956
結論:SharePointクライアントオブジェクトモデルを使用する場合:
1.必要なデータ、または列のみをクエリーします.
2.サーバとの間でデータをやり取りする回数を最小限に抑える.