小编Ale*_*xey的帖子

VS 2019在发布模式下优化代码坏了吗?

对我来说,它看起来很奇怪,并且像个虫子。
Visual Studio 2019中发布模式下的此代码提供了无限循环。

class Program
{
    private static int _a;

    static void Main(string[] args)
    {
        _a = 1;
        while (_a == 1)
        {
            Console.WriteLine(_a);
            _a = 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

volatileThread.MemoryBarrier();(之后_a = 0;)解决了问题。别以为我在VS2015中遇到过这样的问题。这是正确的行为吗?优化了哪些确切的部分?

c# visual-studio-2019

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

HttpClient 注入 Singleton

假设我们有这样的代码:

services.AddHttpClient();
services.AddSingleton<IMyService, MyService>();

...

public class MyService : IMyService
{
    public MyService(HttpClient httpClient)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

有一些问题(可能很愚蠢,但我只是想澄清一些事情):

  1. 它会用来HttpClientFactory创建 的实例吗HttpClient
  2. 我猜它会使用,HttpClientFactory但在这种情况下,DNS 更改会出现问题吗?

目前尚不清楚HttpMessageHandlers 是否会针对单例服务进行管理,以及是否应该对服务进行范围限制以获得HttpClientFactory使用的所有好处。

c# .net-core

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

AutoMapper ProjectTo 与 DbContext 多级 Include()

我需要Include()在 EF Core 选择期间执行多级查询。我将 AutoMapper 与ProjectTo<>().

我已在映射中指定ExplicitExpansion(),这意味着导航属性不会自动填充,因为我希望有可能多次执行相同的查询和一次Include()导航属性,但第二次忽略它。

ProjectTo<>()方法具有参数,允许我将导航属性包含到我的选择中,但我需要执行多级包含。这可能吗?这种语法Include(e => e.Collection.Select(sc => sc.MyProperty))在这种情况下不起作用。

我尝试使用Include().ThenInclude()forDbContext然后执行ProjectTo,但在这种情况下ProjectTo会覆盖我的包含内容并且它们会被忽略。

现在我不确定是否有可能在映射中ProjectTo指定ExplicitExpansion()并具有多级包含?

c# automapper .net-core entity-framework-core-3.1

5
推荐指数
2
解决办法
5460
查看次数

为什么Thread.Sleep(0)时间片处理优先级较低的线程?

据我所知,Thread.Sleep(0)只为具有相同或更高优先级的另一个线程提供时间片.我做了一些测试应用:

class Program
{
    public static void ThreadMethod()
    {
        for (int i = 0; i < 300; i++)
        {
            Thread.Sleep(0);
            Console.WriteLine("{0} ThreadProc: {1}, prio {2} ", Thread.CurrentThread.ManagedThreadId,
                i, Thread.CurrentThread.Priority);
        }
    }

    public static void Main()
    {
        Thread.CurrentThread.Priority = ThreadPriority.Normal;
        Thread t = new Thread(new ThreadStart(ThreadMethod));
        t.Priority = ThreadPriority.Highest;

        Thread t2 = new Thread(new ThreadStart(ThreadMethod));
        t2.Priority = ThreadPriority.Lowest;

        Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)1;

        t.Start();
        t2.Start();

        t2.Join();
        t.Join();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是模拟单核CPU,据我所知这里应该只执行主要具有最高优先级的线程,但我看到:低prio线程不断更改高prio每个操作 交换线程

线程互相改变.(当然在开始和结束时有不同的情况,但最高线程应该总是得到更多的时间片)

为什么这一直不是这样的?低prio线程必须执行较少的时间 首先是高优先级线程

c# multithreading thread-priority

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