程序优化
(1)、列表的对象模型可用,但对于查询之类的,尽量用caml查询语句。下面我们来比较一下一个用对象模型查询,一个用CAML查询的差别。
SPWeb web=site.OpenWeb();
SPList list=web.Lists["userlist"];
//程序段一、在一个用户表里面,如果要查找一条姓名叫a数据
foreach (SPListItem item in list.Items)
{
if (item["name"].ToString() == "a")
{
name = item["name"].ToString();
break;
}
}
//程序段二、如果用另一个方式
SPQuery spq=new SPQuery();
string query=" <Where>"
+" <Eq>"
+" <FieldRef Name=\"name\" />"
+" <Value Type=\"Text\">a</Value>"
+" </Eq>"
+" </Where>";
spq.Query=query;
SPListItemCollection lic = list.GetItems(spq);
string name = "";
foreach (SPListItem item in lic)
{
name = item["name"].ToString();
}
注:程序段一取出列表的所有数据项后进行查询,但程序段二取出所需的数据项后进行查询,显然用CAML的方式速度更快些。
(2)、对于splistitemcollection应尽可能转成datatable,减少对象的创建。
//程序段一
foreach (SPListItem item in list.Items)
{
if (item["name"].ToString() == "a")
{
name = item["name"].ToString();
break;
}
}
//程序段二
DataTable dt = list.Items.GetDataTable();
foreach (DataRow dr in dt.Rows)
{
if (dr["name"].ToString() == "a")
{
name = dr["name"].ToString();
break;
}
}
注:程序段一在重复的使用对象模型获取列表数据及数据集,增加了与服务器的交互,而程序段二则是一次取数后,转用datatable进行数据操作,显然用datatable这种方式更快些。
(3)、注意对对象模型的处理,尽量要养成使用using(...){}等编码方式
//程序段一、
SPWeb web=site.OpenWeb();
SPList list=web.Lists["userlist"];
//在一个用户表里面,如果要查找一条姓名叫a数据
foreach (SPListItem item in list.Items)
{
if (item["name"].ToString() == "a")
{
name = item["name"].ToString();
break;
}
}
//程序段二
using (SPWeb web = site1.OpenWeb())
{
list = web.Lists["userlist"];
//如果用另一个方式
foreach (SPListItem item in list.Items)
{
if (item["name"].ToString() == "a")
{
name = item["name"].ToString();
break;
}
}
}
注:程序段一中创建了对象后又没有关闭对象,添加了服务器负担。程序段用了using之后,会将创建的对象自动消毁,显然用using的方式更优一些。
(1)、列表的对象模型可用,但对于查询之类的,尽量用caml查询语句。下面我们来比较一下一个用对象模型查询,一个用CAML查询的差别。
SPWeb web=site.OpenWeb();
SPList list=web.Lists["userlist"];
//程序段一、在一个用户表里面,如果要查找一条姓名叫a数据
foreach (SPListItem item in list.Items)
{
if (item["name"].ToString() == "a")
{
name = item["name"].ToString();
break;
}
}
//程序段二、如果用另一个方式
SPQuery spq=new SPQuery();
string query=" <Where>"
+" <Eq>"
+" <FieldRef Name=\"name\" />"
+" <Value Type=\"Text\">a</Value>"
+" </Eq>"
+" </Where>";
spq.Query=query;
SPListItemCollection lic = list.GetItems(spq);
string name = "";
foreach (SPListItem item in lic)
{
name = item["name"].ToString();
}
注:程序段一取出列表的所有数据项后进行查询,但程序段二取出所需的数据项后进行查询,显然用CAML的方式速度更快些。
(2)、对于splistitemcollection应尽可能转成datatable,减少对象的创建。
//程序段一
foreach (SPListItem item in list.Items)
{
if (item["name"].ToString() == "a")
{
name = item["name"].ToString();
break;
}
}
//程序段二
DataTable dt = list.Items.GetDataTable();
foreach (DataRow dr in dt.Rows)
{
if (dr["name"].ToString() == "a")
{
name = dr["name"].ToString();
break;
}
}
注:程序段一在重复的使用对象模型获取列表数据及数据集,增加了与服务器的交互,而程序段二则是一次取数后,转用datatable进行数据操作,显然用datatable这种方式更快些。
(3)、注意对对象模型的处理,尽量要养成使用using(...){}等编码方式
//程序段一、
SPWeb web=site.OpenWeb();
SPList list=web.Lists["userlist"];
//在一个用户表里面,如果要查找一条姓名叫a数据
foreach (SPListItem item in list.Items)
{
if (item["name"].ToString() == "a")
{
name = item["name"].ToString();
break;
}
}
//程序段二
using (SPWeb web = site1.OpenWeb())
{
list = web.Lists["userlist"];
//如果用另一个方式
foreach (SPListItem item in list.Items)
{
if (item["name"].ToString() == "a")
{
name = item["name"].ToString();
break;
}
}
}
注:程序段一中创建了对象后又没有关闭对象,添加了服务器负担。程序段用了using之后,会将创建的对象自动消毁,显然用using的方式更优一些。