LINQ的AsParallel回报ParallelQuery.我想知道是否有可能改变这种行为,以便我可以在没有实际更改代码的情况下比较运行和不运行并行的LINQ语句?此行为应类似于Debug.Assert- 如果DEBUG未设置预处理程序指令,则会对其进行优化.所以我希望能够AsParallel返回相同类型而不将其转换为ParallelQuery.
我想我可以声明我自己的扩展方法(因为我无法覆盖AsParallel)并在其中分析了预处理器指令:
public static class MyExtensions
{
#if TURN_OFF_LINQ_PARALLELISM
public static IEnumerable<T> AsControllableParallel<T>(this IEnumerable<T> enumerable)
{
return enumerable;
}
#else
public static ParallelQuery<T> AsControllableParallel<T>(this IEnumerable<T> enumerable)
{
return enumerable.AsParallel();
}
#endif
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否还有其他办法.我要求太多了吗?
似乎MS正在支持自己的行程,允许在IIS之外托管WCF服务.从我的角度来看,IIS是相对简单但又冗余的服务层.WCF的引入极大地简化了服务托管,使IIS萎缩.所以你怎么看?我错过了什么?为什么我会将IIS用于WCF服务?因为我没有看到原因.
遇到以下问题。我有一个属性,用于定义数据库表中键的名称。使用反射,我可以初始化属性或具有该属性的字段的值。在我将属性定义为数组之前,一切都很好:
[ConfigurationKey("TestArray")]
public int[] Array { get; set; }
Run Code Online (Sandbox Code Playgroud)
假设表中存储的值是逗号分隔的字符串,我将使用以下内容创建一个数组:
return valueString.Split(',').Select(s => Convert.ChangeType(s, memberType.GetElementType())).ToArray();
Run Code Online (Sandbox Code Playgroud)
这确实创建了一个元素数组,但仅创建了对象数组。结果,当我使用FieldInfo或PropertyInfo设置值时,会抛出异常“无法分配Object[]给Int32[]”。
有任何想法吗?
我有一个简单的方法:
public static T GetValue<T>(SqlDataReader reader, int columnIndex, T defaultValue = default(T))
{
return reader.IsDBNull(columnIndex) ? defaultValue : (T)reader[columnIndex];
}
Run Code Online (Sandbox Code Playgroud)
和它的用法:
string s = SqlUtils.GetValue<string>(reader, nameOrd);
Run Code Online (Sandbox Code Playgroud)
我问自己,为什么我必须指定<string>是否从使用中清楚地看到返回参数的类型是字符串?但显然我必须因为否则编译器抱怨The type arguments cannot be inferred from the usage....我的逻辑在哪里失败了?
有一个很好的 ASP.NET 性能计数器类别和一组计数器,可用于在性能测试运行期间跟踪请求队列。但是,我无法为未通过 IIS 托管的 WCF 服务找到类似的设置。我们的 WCF 服务使用 net-tcp 协议作为 Windows 服务运行。我了解到有几个绑定参数可以控制排队(Binding.MaxConnections和Binding.ListenBacklog)。这不是一个很容易的发现。所以我想知道,为什么要在 PerfMon 中跟踪这两个值?
与此相关:
System.OutOfMemoryException因为大字典
OutOfMemoryException当我让.NET管理我的字典时,我得到了.调整大小方法抛出的异常.所以我试图通过提供大量的容量来避免调整大小.当然,我试图从int.MaxValue确保它将有助于解决问题开始.我计划尽可能多地下降.
然而OutOfMemoryException被扔了int.MaxValue.我决定进行一些二进制搜索,并将构造函数接受的容量的第一个值转换为int.MaxValue / 32.这不仅比我预期的要小,而且还令人困惑.
那么有谁有任何想法为什么?
哦,项目设置设置为使用x64架构.
我有一个简单的枚举:
enum E
{
FullNameForA = 1,
A = 1,
FullNameForB = 2,
B = 2
}
Run Code Online (Sandbox Code Playgroud)
目标是能够使用不同的字符串值对相同的积分值进行扭曲 - 必须使用FullNameFor*作为默认值.换句话说,用户可以提供EA作为输入,但代码应使用E.FullNameForA进行输出.
似乎默认情况下C#将使用具有相同积分值的元素的字母顺序,这使我的目标更难.是对的吗?任何想法如何克服这个?
有一种方法,但它很糟糕,我正在寻找更清洁的东西.
我可以去菜单选择Run All Test in Solution.这会将所有测试带到会话中.但并非所有测试都是可运行的 - 有一组测试专为调试和集成而设计.这些测试有不同的类别.
我的目标是仅运行具有特定类别的解决方案中的所有测试.为此,我希望让ReSharper扫描我的解决方案,应用过滤器,然后运行生成的集合.
那可能吗?
我的应用程序中有来自Ninject的IOC.有几个类需要花费大量时间来初始化(从DB或文件中获取一些静态数据缓存).显然,他们需要在处理第一个用户请求之前创建它们.否则会有很高的超时风险.Ninject是否提供了一种方法来告诉内核通过绑定并创建一些?
c# ×9
.net ×8
linq ×2
wcf ×2
dictionary ×1
generics ×1
iis ×1
mstest ×1
ninject ×1
perfmon ×1
plinq ×1
resharper ×1
unit-testing ×1
web-services ×1