gpt4 book ai didi

c# - 我可以加快此查询以检索域中的所有计算机吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:01 25 4
gpt4 key购买 nike

我写了一个帮助类来让域中的所有计算机,但它有点慢。虽然返回了 128 个对象,但我仍然想加快速度。有什么想法吗?

public class DomainBrowser
{
private const string Computer = "computer";

public string Domain { get; private set; }

public DomainBrowser(string domain)
{
this.Domain = domain.ToLower();
}

/// <summary>
/// This method returns a list of the computer names available in the current domain.
/// </summary>
/// <returns></returns>
public List<string> GetComputers()
{
var winDirEntries = new DirectoryEntry("WinNT:");

var computers = (from DirectoryEntry domain in winDirEntries.Children
where domain.Name.ToLower() == this.Domain
from DirectoryEntry pc in domain.Children
where pc.SchemaClassName.ToLower().Contains(Computer)
select pc.Name).ToList();

return computers;
}
}

最佳答案

这里最大的问题之一是所有 ToLower() 调用。字符串是不可变的,因此它们的每次更改(例如将它们更改为代码示例中的小写字母)都会创建一个新对象。此外,将字符串小写化所涉及的逻辑比您想象的要昂贵得多,因为它必须考虑诸如当前区域性设置之类的事情。

为了减少开销,尽量不要更改字符串引用,而是将它们与不区分大小写的内容进行比较:

var computers = (from DirectoryEntry domain in winDirEntries.Children
where string.Equals(domain.Name, this.Domain, StringComparison.OrdinalIgnoreCase)
from DirectoryEntry pc in domain.Children
where pc.SchemaClassName.IndexOf(Computer, StringComparison.OrdinalIgnoreCase) != -1
select pc.Name).ToList();

请注意,我必须将 string.Compare 更改为 string.IndexOf,因为 Compare 没有不区分大小写的重载。

关于c# - 我可以加快此查询以检索域中的所有计算机吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17329642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com