System.DirectoryServices.DirectorySearcher导致“算术运算导致溢出”错误

时间:2012-04-24 02:30:10

标签: .net memory-leaks active-directory directoryservices

我遇到了与使用查询AD相关的以下间歇性错误 DirectorySearcher.FindOne()FindAll()

System.OverflowException: Arithmetic operation resulted in an overflow.
     at System.DirectoryServices.SearchResultCollection.ResultsEnumerator.GetCurrentResult()
     at System.DirectoryServices.SearchResultCollection.ResultsEnumerator.get_Current()
     at System.DirectoryServices.SearchResultCollection.ResultsEnumerator.System.Collections.IEnumerator.get_Current()

这是在网络应用程序中发生的,似乎是在应用程序运行了几个小时之后发生的。

这是Microsoft Connect上的documented issue,但它看起来已被标记为“不可重现”并已关闭。

我发现here唯一的解决方法是定期回收应用池,这是一个相当苛刻的解决方法,当用户处于工作中时不可行。

有没有人经历过这个,如果有,这是如何解决的?

我曾尝试使用缓存,但这只会延迟不可避免的事情,直到您达到AD调用次数的某个阈值,因为人们已经报告每次API调用leaks memory时。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

构建AD API并在其自己的应用程序池中运行它。每隔几个小时回收一次。所有API都将处理对AD的调用。看起来你已经有了代码,只需要转移到API。我发现AD API对许多其他项目非常有用,并继续作为参考点。