小编Dej*_*jan的帖子

将DateTime的Date部分序列化为4个字节的最快方法?

我想将Date一部分序列DateTime化为4个字节(可能是Int32).最快的方法是什么?

背景:为了序列化一个完整的DateTime我到目前为止一直在使用该ToBinary方法.它返回Int64我在其他地方存储的内容.现在,我只储存要求Date的部分DateTime只使用一半的空间.所以,我想知道如何以最快的方式实现这一点,因为性能至关重要.

我想到的选项是:

  • int通过使用一些乘法和属性访问来编码年,月,日和YYYYMMDD,这种编码是人类可读的良好副作用.
  • 继续使用ToBinary并保留返回的"上半部分或下半部分" long.不知道是否可能.
  • 检查DateTime内部存储方式.也许可以通过其他方式访问日期部分.

你会怎么做?

c# datetime

1
推荐指数
1
解决办法
532
查看次数

如何从 net462 目标 SDK 项目引用 System.Windows.Forms

是否有可能引用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 大会成为一个问题,那么该框架就不再那么“完整”了。因此,我的问题。

c# gac .net-core visual-studio-2017

1
推荐指数
1
解决办法
1598
查看次数

与固定数量的任务/线程并行使用IEnumerable

我有一个源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).

c# task-parallel-library

0
推荐指数
1
解决办法
675
查看次数

$inlinecount 不能使用 ApplyTo 在 ApiController 上工作

我正在尝试在标准 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)

到目前为止,一切都按预期运行良好。

现在,我对过滤项目的总数感兴趣,因此我已将其添加 …

c# odata asp.net-web-api asp.net-web-api2

0
推荐指数
1
解决办法
987
查看次数