MOSS程序优化

来源:互联网 发布:华为云计算培训学校 编辑:程序博客网 时间:2024/06/05 20:42
程序优化
  (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的方式更优一些。