优化.NET访问Active Directory的性能
2008-11-18 23:45
225 查看
从Active Directory获取大量对象时应特别注意,一不小心,就会掉入性能瓶颈甚至引起内存泄漏。本文提供了一个关于.NET访问Active Directory的优化例子。
1.获取对象的属性值 DirectoryEntry.Properties
获取一个DirectoryEntry对象后,我们就开始检索它的属性值;习惯了用foreach的朋友一般会这样写:
Code
private ArrayList InnerList
{
get
{
if (this.innerList == null)
{
this.innerList = new ArrayList();
IEnumerator enumerator = new ResultsEnumerator(this, this.rootEntry.GetUsername(), this.rootEntry.GetPassword(), this.rootEntry.AuthenticationType);
while (enumerator.MoveNext())
{
this.innerList.Add(enumerator.Current);
}
}
return this.innerList;
}
}
而foreach是直接调用迭代器创建和返回一个SearchResult对象,避免了装箱与拆箱的过程。
应严重注意的是:SearchResultCollection是未托管资源,而且会占用大量的内存,需要获取大量对象的属性时,推荐使用集合来保存所需的属性值,完成之后立即调用SearchResultCollection.Dispose()来对它进行释放,否则,会导致内存泄露。
1.获取对象的属性值 DirectoryEntry.Properties
获取一个DirectoryEntry对象后,我们就开始检索它的属性值;习惯了用foreach的朋友一般会这样写:
Code
private ArrayList InnerList
{
get
{
if (this.innerList == null)
{
this.innerList = new ArrayList();
IEnumerator enumerator = new ResultsEnumerator(this, this.rootEntry.GetUsername(), this.rootEntry.GetPassword(), this.rootEntry.AuthenticationType);
while (enumerator.MoveNext())
{
this.innerList.Add(enumerator.Current);
}
}
return this.innerList;
}
}
而foreach是直接调用迭代器创建和返回一个SearchResult对象,避免了装箱与拆箱的过程。
应严重注意的是:SearchResultCollection是未托管资源,而且会占用大量的内存,需要获取大量对象的属性时,推荐使用集合来保存所需的属性值,完成之后立即调用SearchResultCollection.Dispose()来对它进行释放,否则,会导致内存泄露。
相关文章推荐
- 优化.NET访问Active Directory的性能
- .net 访问ISeries的性能优化
- ORACLE数据库访问性能优化
- 小议优化ASP.NET应用性能之Cache篇-.NET教程,Asp.Net开发
- 数据库访问性能优化
- 数据库访问性能优化(四)
- 优化SQL语句,提高数据库的访问性能
- 高性能Javascript笔记 数据的存储与访问性能优化
- .Net频繁访问数据库的优化探究(一)
- 【数据库优化】面向程序员的数据库访问性能优化法则
- Web前端性能优化之一:优化浏览器访问
- 14个优化网站性能提高网站访问速度技巧
- 数据库 访问性能优化
- 从前端性能优化的角度提高自己的博客的访问速度
- 雅虎十四条 - 14个优化网站性能提高网站访问速度的技巧
- .NET 性能优化方法总结
- 数据库访问性能优化
- 一起谈.NET技术,性能优化总结
- 【SqlServer2005+ 查询优化】MSSQL优化SQL语句 提高数据库的访问性能
- 高性能javascript笔记:数据的存储与访问性能优化