(转)MOSS性能优化

一、数据库

    
二、服务器设置

     1、IIS 压缩

          IIS压缩并不是一项新技术,但对于SharePoint站点而言,IIS压缩能起到很大的作用。在IIS服务器上启用IIS压缩功能之后,在IIS服务器把页面内容发    

          送给浏览器之前,会在服务器上先把内容进行压缩,然后发送压缩后的数据,浏览器接收到数据后,会自动进行解压,然后显示。由于在网络上传输

          的数据被压缩了,所以可以将页面内容更快的传送到浏览器,提高页面浏览速度。

          可以参考:SharePoint 2007 性能优化--IIS压缩收藏
     2、索引设置

               将索引的目录位置设在另一个盘上
     3、log设置
     4、SharePoint 站点集支持输出缓存设置

ü 在站点集层次进行控制

u 允许排除应用程序页面(Application Pages)和子站点

u 使用不同的缓存配置文件

u 内置的缓存配置文件已经可以适用于大部分场景

ü 文件缓存

          因为SharePoint 将所有文件保存到数据库中,文件缓存设置能够将 SharePoint 文件缓存到磁盘上。开启文件缓存可以增加访问速度,提高网站集的性能。

ü 对象缓存

u 默认会被开启

u 用来存储经常访问的列表项

u 站点导航结构

u 文档库或列表的栏结构

u 默认使用 100MB 内存空间

u 使用管理界面来清空对象缓存(同时也可以清空文件缓存)
   5、延迟下载core.js文件

          core.js 是 SharePoint 中最大的 jscript 文件

          257k on disk, 54k compressed

          在大部分匿名用户场景的页面载入阶段都不需要它
   6、关注列表(文档库)的性能

  ü 遵守微软对列表和文档库的性能建议:

     u 一个文件夹下不要存放超过2000个数据项

     u 一个文档库不能超过1000个文件夹

  ü 合理使用索引栏


      7、程序优化
         (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的方式更优一些。

  转自:http://www.cnblogs.com/chendianhong/archive/2007/11/23/969778.html

posted @ 2009-10-21 15:52  天空行马  阅读(388)  评论(0编辑  收藏  举报