我继承了许多远程WMI调用的代码.当我反复暂停执行并查看调用堆栈时,它几乎总是在ManagementScope.Connect()通话中.每个WQL查询似乎都会建立一个新连接.
尽管试验和错误有限,但我还没有找到任何改善WMI调用性能的大赢家.
我已经尝试过缓存以前的结果,重用连接,并避免可怕的" select *".这些并没有给我带来我想要的性能提升.我有兴趣了解环境对WMI性能的影响,但代码需要在各种可能无法控制的环境中运行.
如果有的话,.NET中面向性能的WMI访问有什么作用和不做什么?
我正在实现一个流畅的构建器模式,它需要在静态扩展方法中接受可枚举并迭代其内容,同时将一个仿函数应用于可枚举的内容.如(不是实际代码,只是一个例子):
public static IValidator<IEnumerable<T>> Each<T>(
this IValidator<IEnumerable<T>> enumerable,
Func<T, bool> action)
{
foreach (T value in enumerable)
action(value);
return validator;
}
Run Code Online (Sandbox Code Playgroud)
这对于枚举非常有效,但对于继承的类型/接口则失败.让我们说:
IValidator<IEnumerable<Guid>> validator = ...;
IEnumerable<Guid> guids = ...;
validator.Each(guids, guid => guid != Guid.Empty); // ok
IList<Guid> guids = ...;
validator.Each(guids, guid => guid != Guid.Empty); // doesn't compile (see below)
Run Code Online (Sandbox Code Playgroud)
例外是:
IValidator<IList<Guid>>不包含'Each'的定义,也没有扩展方法'each'接受类型的第一个参数IValidator<IList<Guid>>可以找到(你是否缺少using指令或汇编引用?
我的问题是关于继承链IValidator<T>,更具体地说,是它的泛型类型参数T.为什么类型IValidator<IEnumerable<T>>不可分配IValidator<IList<T>>?没有任何情况我可以想到哪个IList<T>不是IEnumerable<T>(给定相同T).
约束泛型参数T : IEnumerable<R>确实有效,但是如果可能的话,这需要两个我想避免的类型参数(T和 …
在Win2k上支持WCF需要什么,或者至少最小化支持通过.Net与Win2k服务器进行远程通信的工作量?
我正在研究的产品有一个遗留的.NET远程实现,它已经被WCF取代,用于新的开发.遗留实现用作与WCF实施之前运行旧版本的服务器通信的后备.
销售已经要求Win2k支持,因为在Win2k上不支持.NET 3.0(因此可能是WCF),因此在某些方面留下了开发.我们希望以最少的额外开发工作来支持Win2k,但似乎为了支持Win2k,我们必须实现两次接口; 一次用于远程服务器的远程处理,一次用于WCF.