(转)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