- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在优化我们用来查询 Active Directory 的一些代码。其中一种方法获取自特定更新以来已更改的所有 AD 用户,由目录条目的 uSNCreated 属性确定。本质上,它是在执行 C# 等价物:
select * from PrincipalSearcher where uSNCreated > somevalue
代码是(或多或少):
public IEnumerable<UserPrincipal> GetUpdatedUsers(string samAccountName, long lastUsnChanged)
{
using (var context = new PrincipalContext(ContextType.Domain))
using (var userSearcher = new PrincipalSearcher(new UserPrincipal(context)))
{
var items = userSearcher.FindAll().Cast<UserPrincipal>();
return items.Where(x => GetUsnChanged(x) > lastUsnChanged).ToArray();
}
}
private static long GetUsnChanged(Principal item)
{
var de = item.GetUnderlyingObject() as DirectoryEntry;
if (de == null)
return 0;
if (!de.Properties.Contains("uSNCreated"))
return 0;
var usn = de.Properties["uSNCreated"].Value;
var t = usn.GetType();
var highPart = (int)t.InvokeMember("HighPart", BindingFlags.GetProperty, null, usn, null);
var lowPart = (int)t.InvokeMember("LowPart", BindingFlags.GetProperty, null, usn, null);
return highPart * ((long)uint.MaxValue + 1) + lowPart;
}
现在这段代码确实有效,但对 InvokeMember() 的重复调用速度很慢。我想要做的是获得对 HighPart 和 LowPart 属性的引用,这样我就可以一遍又一遍地调用它们,而无需在每次调用 InvokeMember() 时都需要“重新发现”它们。
我想我可以做一些类似的事情
static PropertyInfo highProp = highProp
?? t.GetProperty("HighPart", BindingFlags.GetProperty);
highPart = (int)highProp.GetValue(usn);
不幸的是,t.GetProperty() 总是返回 null。查看 GetProperties()、GetMethods() 和 GetMembers() 返回的结果,即使使用 BindingFlags.NonPublic - __ComObject 也似乎没有我可以得到的可见“HighPart”或“LowPart”似乎没有公开它们(即使我可以使用 InvokeMember() 调用)
有没有办法解决这个问题,还是该认输了?
最佳答案
System.DirectoryServices.AccountManagement 命名空间中的类设计用于简单情况,例如。 G。您需要找到一个用户或组。这些类具有已知的性能问题。我建议使用 DirectorySearcher 或 LdapConnection/SearchRequest。在这种情况下,您可以在服务器上过滤对象,而不是在客户端上,这将显着提高性能并减少通过网络发送的数据。以下是使用 DirectorySearcher 查找所有用户的示例:Get all users from AD domain在您的情况下,过滤器看起来像 (&(objectClass=user)(uSNCreated>=x+1)) ,其中 x 是您的最后一个 usn。请注意,如果您使用 usnCreated 属性跟踪对象,您将只会获得自上次使用以来创建的用户。要跟踪更改,请使用 usnChanged 属性
关于c# - 从 __ComObject 获取可调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46736036/
我正在优化我们用来查询 Active Directory 的一些代码。其中一种方法获取自特定更新以来已更改的所有 AD 用户,由目录条目的 uSNCreated 属性确定。本质上,它是在执行 C# 等
是否可以将 System.__ComObject 转换为仅在运行时才知道的某种类型?我有以下代码 Type ComClassType = SomeDLLAssembly.GetType("ClassN
我正在使用 DSOFile 从某些 Crystal Reports 报表文件中获取摘要属性。 SummaryProperties.Thumbnail 返回一个对象,我需要将该对象转换为图像,以便在我的
由于将项目从 VS2010 升级到 VS2012,我收到错误消息: 'System.__ComObject' does not contain a definition for .WithComCle
Powershell与Excel新手在这里。我正在学习如何通过 powershell 与 excel 交互,并在几个网站上发现了“范围”功能。 奇怪的是,此功能在我的系统上不起作用并返回以下错误:方法
我有一个涉及以下场景的问题,应用程序 A 有一个 DataGridView,从中选择对象。它们被拖到应用程序 B 内的 DataGridView 中,对象被复制到新列表中。这是 App A 中的代码,
我正在尝试使用反射将 System.__ComObject 转换为接口(interface)类型。我试过使用 Convert.ChangeType(Object,Type) 但是 c# 然后抛出这个错
我将是第一个承认这是过时的编程。我以前从来没有看过AD,真的不明白。我想那是我的下一个研究...... 无论如何,这是一些测试代码,它应该显示到期日期——要么是可读的,要么是刻度线——这无关紧要。 (
尝试在 Visual Studio 2010 中发布 XNA 项目时出现以下错误。 Error 1 Publish failed with the following error: Unable to
我正在使用 C# 与 SolidWorks 交互。 我使用的是 Visual Studio 2017 最新版本 (15.7.3)。该项目引用了 SolidWorks .tlb 文件,就像文档中所说的那
我正在尝试自动登录并从特定站点收集数据。这是我的代码 $ie = New-Object -ComObject InternetExplorer.Application; $ie.Visible = $
我一直在编写一个使用网络浏览器界面运行某些服务器功能的脚本。我使用 Internet Explorer 8 在 Windows 7 上编写了脚本,它运行良好。一旦我将它移动到运行 Windows 20
这是我用来读取 xls 文件的代码: Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Intero
我正在尝试将以下 C# 代码转换为 PowerShell(我省略了我认为不相关的代码部分): C# System.Type t = System.Type.GetTypeFromProgID("Vis
有人知道在 C# 中对 __ComObject 实例使用“动态”关键字时是否有办法防止 RuntimeBinder 中的内存泄漏吗? 我得到了以下代码: var t = Type.GetTypeFro
我有两个 C# 项目,一个是 dll,另一个是 Windows 窗体应用程序。 我在 dll 中定义了一个 CoClass,如下所示` ' [ComVisible(true), Gui
我正在尝试使用 LINQPad快速发展小ArcObjects (一个基于 COM 的库,用于 ESRI's ArcGIS 软件)应用程序,并在使用它来 Dump() 我从 .NET 初始化的 COM
当我出于好奇而反射(reflection)所有类型以检查其他内容时,我偶然发现了一个奇怪的现象。 为什么程序集 mscorlib.dll(有时?)的类 System.__ComObject 声称是公开
我编写了一个使用防火墙 COM 库 Interop.NetFwTypeLib 来管理 TCP 传输规则的 Windows 服务。在两台机器上部署不报告问题,但我最近在另一台计算机上安装它并收到异常:
下面的代码给了我错误:cannot convert COM object of type 'System.__ComObject' to class type 'System.Web.UI.WebCo
我是一名优秀的程序员,十分优秀!