Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# webhost respawn上asp.net core自托管应用程序泄漏_C#_Asp.net Core_Memory Leaks - Fatal编程技术网

C# webhost respawn上asp.net core自托管应用程序泄漏

C# webhost respawn上asp.net core自托管应用程序泄漏,c#,asp.net-core,memory-leaks,C#,Asp.net Core,Memory Leaks,我有一个自行托管的asp.net核心应用程序,需要偶尔用新的上下文更新其Web主机。应用程序在asp.net DI容器中将共享资源注册为单例 services.AddSingleton<MyDep>(); 我看到控制器的n个实例,其中n是对控制器的http请求数-控制器根本没有被处理。 探查器指示到根目录的长路径,该路径在链的末尾具有System.Threading.OverlappedData。你能告诉我这个设置有什么问题吗? 我看到控制器的n个实例,

我有一个自行托管的asp.net核心应用程序,需要偶尔用新的上下文更新其Web主机。应用程序在asp.net DI容器中将共享资源注册为单例

            services.AddSingleton<MyDep>();
我看到控制器的n个实例,其中n是对控制器的http请求数-控制器根本没有被处理。 探查器指示到根目录的长路径,该路径在链的末尾具有System.Threading.OverlappedData。你能告诉我这个设置有什么问题吗?

我看到控制器的n个实例,其中n是对控制器的http请求数

这是预期的行为。默认情况下,会为每个请求创建控制器


从中,我看不到有多个
MyDep
实例。快照显示了
Func
的实例,它不是预期的单例。如果调用委托,您将在不同的请求中获得相同的
MyDep
。总的来说,这里没有什么问题。您正在跟踪错误的类型。

好的,我为所描述的问题显示了错误的跟踪。然而,上下文并没有得到适当的释放

我找到了一个解决方案:iaapplicationlifecycle.stopplication,如下所述->

上下文被正确释放,内存占用不再无限增长

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    public MyDep Dep { get; }

    public ValuesController(MyDep dep)
    {
        Dep = dep;
    }

    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] {
            new string(Dep.Content),
            "value2" };
    }
 }
public static void Main(string[] args)
    {
        var p = new Program();
        while (true)
        {
            p.Boot(args);
            GC.Collect(2, GCCollectionMode.Forced, true);
        }
    }

    private void Boot(string[] args)
    {
        webHost = CreateWebHostBuilder(args).Build();
        webHost.RunAsync();
        Thread.Sleep(5000);
        webHost.StopAsync().Wait();
        webHost.Dispose();
    }