悠闲小风专栏

SharePoint & Workflow 解决方案

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  56 随笔 :: 0 文章 :: 33 评论 :: 46777 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

一、数据库

     
二、服务器设置

     1、IIS 压缩

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

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

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

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

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

ü 在站点集层次进行控制

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

使用不同的缓存配置文件

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

ü 文件缓存

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

ü 对象缓存

默认会被开启

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

站点导航结构

文档库或列表的栏结构

默认使用 100MB 内存空间

使用管理界面来清空对象缓存(同时也可以清空文件缓存)

   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的方式更优一些。


 

posted on   陈典洪  阅读(832)  评论(2编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示