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:オブジェクトモデルを使用して、現在のサイトのすべてのリストのタイトルを取得します.
前:
 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データ:
谈谈SharePoint 2010的客户端对象模型的性能问题_第1张图片
次の操作を行います.
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データ
谈谈SharePoint 2010的客户端对象模型的性能问题_第2张图片
比較:
 

を選択します.
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データ:
谈谈SharePoint 2010的客户端对象模型的性能问题_第3张图片
次の操作を行います.
 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データ:
谈谈SharePoint 2010的客户端对象模型的性能问题_第4张图片
比較:
 

を選択します.
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.サーバとの間でデータをやり取りする回数を最小限に抑える.