我想将Date一部分序列DateTime化为4个字节(可能是Int32).最快的方法是什么?
背景:为了序列化一个完整的DateTime我到目前为止一直在使用该ToBinary方法.它返回Int64我在其他地方存储的内容.现在,我只储存要求Date的部分DateTime只使用一半的空间.所以,我想知道如何以最快的方式实现这一点,因为性能至关重要.
我想到的选项是:
int通过使用一些乘法和属性访问来编码年,月,日和YYYYMMDD,这种编码是人类可读的良好副作用.ToBinary并保留返回的"上半部分或下半部分" long.不知道是否可能.DateTime内部存储方式.也许可以通过其他方式访问日期部分.你会怎么做?
是否有可能引用System.Windows.Forms目标为 的 Sdk 项目(VS 2017)net462?就像是:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net462</TargetFrameworks>
...
</PropertyGroup>
<PackageReference Include="System.Windows.Forms" Version="4.0.0" />
...
Run Code Online (Sandbox Code Playgroud)
或者概括一下这个问题:如何从 Sdk 项目中使用驻留在 GAC 中的系统库?根据此讨论,它似乎不是开箱即用的支持。
让我困惑的部分是,定位给人一种可以访问完整net462框架的印象。然而,如果 GAC 大会成为一个问题,那么该框架就不再那么“完整”了。因此,我的问题。
我有一个源IEnumerable<T>,我想以并行的方式处理具有固定数量的任务/线程(接近处理器的数量),每个源从源中抓取下一个项目并处理它直到所有元素都被迭代.
Parallel.For 由于元素数量未知,因此不是候选者.Parallel.ForEach不是候选者,因为即使指定MaxDegreeOfParallelism此参数也会创建许多任务,但只确保同时运行的任务的最大数量,而不是创建的任务数量.听起来像生产者/消费者问题的简化,生产者可以是单线程的,一旦IEnumerable完成,就不会再添加任何元素.
如何使用TPL解决这个问题?我是否必须实现自己的可共享线程安全IEnumerable或框架是否提供了什么?
编辑:这是我的尝试Parallel.ForEach和指定MaxDegreeOfParallelism哪些不会阻止TPL创建许多任务.
int nbTasks = 0;
Parallel.ForEach(positions, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount },
() => { return new List<IPositionData>(); },
(position, loop, list) =>
{
Thread.Sleep(1);
list.Add(position);
return list;
},
list => Interlocked.Add(ref nbTasks, 1));
Trace.WriteLine(string.Format("Tasks: {0}", nbTasks));
Run Code Online (Sandbox Code Playgroud)
评论:positions是我的来源IEnumerable<IPositionData>.我刚刚运行了这个,例如,nbTasks是64(而不是我的4核上预期的4).
我正在尝试在标准 Web API 2.2 中使用 OData 过滤和分页功能ApiController。为此,我必须重写请求 URL 以符合 OData v4 标准。我的控制器看起来像这样:
public GridPage Get([FromUri] GridSearchCriteria criteria)
{
Request.RequestUri = ... // convert querystring to OData v4
var context = new ODataQueryContext(MyEdmModel.Instance, typeof(Delivery), null);
ODataQueryOptions<Delivery> options = new ODataQueryOptions<Delivery>(context, Request);
IQueryable<Delivery> deliveries = ... // use EF to load deliveries from DB
var result = (IQueryable<Delivery>)options.ApplyTo(deliveries); // BTW, I wonder why there is no generic overload of ApplyTo?
// fill and return a GridPage
...
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都按预期运行良好。
现在,我对过滤项目的总数感兴趣,因此我已将其添加 …