ASP.Net C#Active Directory:在每次DirectoryEntry.MoveTo()调用后继承了一个应用程序,其中包含thread.sleep()
所以我正在开发这个应用程序,它是由其他不再参与这个项目的人开发的。正如标题中所述,有几个thread.sleep()调用让我抓狂。我没有与广告公司合作的经验 最严重的违规者是在继承ASP.Net C#Active Directory:在每次DirectoryEntry.MoveTo()调用后继承了一个应用程序,其中包含thread.sleep(),c#,active-directory,C#,Active Directory,所以我正在开发这个应用程序,它是由其他不再参与这个项目的人开发的。正如标题中所述,有几个thread.sleep()调用让我抓狂。我没有与广告公司合作的经验 最严重的违规者是在继承原则的类中睡眠50秒的人 public class Computer:ComputerPrinciple { ... public void MoveToOu(string ou) { var userObject = (DirectoryEntry)GetUnderlyingO
原则的类中睡眠50秒的人
public class Computer:ComputerPrinciple
{
...
public void MoveToOu(string ou)
{
var userObject = (DirectoryEntry)GetUnderlyingObject();
var newParentOu = new DirectoryEntry("LDAP://" + ou);
userObject.MoveTo(newParentOu);
Thread.Sleep(50000);
userObject.Close();
newParentOu.Close();
}
...
}
没有什么可以解释原因,但我怀疑这是在完全提交更改之前刷新页面的问题(?)。我非常确定的一点是,Thread.Sleep(50000)
不是解决我们遇到的任何问题的正确方法
我想听听对此有经验的人的意见,如果确实存在某种问题,这将“解决”,那么解决方案将是什么
此外,我认为我应该使用“using”指令,但我想知道如何处理underyingobject
,或者干脆关闭它,因为这段代码是从这样的地方调用的,其中计算机是移动代码的原理
computer.UpdateComputerDescription(collection);
computer.UpdateComputerOu(collection); <--- offending MoveToOu method is called in here
computer.UpdateComputerIsActivedProperty(collection);
computer.Save();
computer.UpdateComputerDescription(集合);
computer.UpdateComputerOu(集合) 使用Thread.Sleep
可能是不调用CommitChanges
的一种解决方法
从
如果UsePropertyCache为true,则对新对象调用CommitChanges方法以使移动永久化
看起来他们在等待缓存使用经验延迟刷新
其次,在中使用将您创建的任何IDisposable
包装到中的移动到中不会破坏任何内容。这是正确的方法。在MoveToOu
范围内使用但未创建的对象不应在此处处理,而应留给容器类处理机制处理。据我所知,MoveToOu只接受一个字符串参数,根本不使用collection
?-->因此,无论您在MoveToOu
中创建和处理什么,都不会影响调用代码时的对象。@dlatikay我没有在UpdatecomputerOu中发布代码,但其中有一些内容可以提取OU并调用MoveToOu方法。谢谢您的回答。我读过这篇文章,但它并没有真正发出咔哒声,我也不确定它是否让我走错了方向。我刚刚运行了一个测试,UsePropertyCache确实是正确的。关于使用,请澄清一下(DirectoryEntry)myPrinciple.getUnderlineingObject()是否创建了一个新对象?