小编use*_*922的帖子

.NET Framework 的 Microsoft.Extensions.DependencyInjection 导致内存泄漏

由于 Unity 已被弃用,我最近将 .Net Framework 4.7.2 MVC 项目从 Unity 移至 Microsoft.Extensions.DependencyInjection。切换似乎很简单,主要变化是需要创建自定义DependencyResolver,因为这之前是由 Unity 处理的。

现在这些更改已在生产中进行,我开始注意到一些严重的内存问题。获取内存使用情况的转储显示内存中最大的项目来自ServiceProviderMicrosoft.Extensions.DependencyInjection,其中包含数千个尚未处理的控制器。

DependencyResolver 看起来像:

public class MicrosoftDefaultDependencyResolver
    : System.Web.Mvc.IDependencyResolver
    , System.Web.Http.Dependencies.IDependencyResolver
{
    protected IServiceProvider serviceProvider;

    public MicrosoftDefaultDependencyResolver(IServiceProvider serviceProvider)
    {
        this.serviceProvider = serviceProvider;
    }

    public IDependencyScope BeginScope()
    {
        return new MicrosoftDefaultDependencyResolver(
            this.serviceProvider.CreateScope().ServiceProvider);
    }

    public void Dispose()
    {
    }

    public object GetService(Type serviceType)
    {
        return this.serviceProvider.GetService(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return this.serviceProvider.GetServices(serviceType);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经根据我阅读的 stackoverflow 文章实现了这一点:How do I insert dependency in webapi …

.net c# dependency-injection

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

错误:无法找到或加载主类Test

我目前正在教自己ANTLR,在完成"The Definitive ANTLR Reference"一书时,我遇到了一个问题.我正在做第一个例子,并创建了语法文件,得到了我的Lexer和Parser Java文件,创建了以下Java程序来测试它:

import org.antlr.runtime.*;

public class Test 
{
    public static void main(String[] args) throws Exception
    {
        ANTLRInputStream input = new ANTLRInputStream(System.in);

        TLexer lexer = new TLexer(input);

        CommonTokenStream tokens = new CommonTokenStream(lexer);

        TParser parser = new TParser(tokens);

        parser.r();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我使用命令行编译哪个工作正常,然后我尝试运行Java类,它失败了,整个命令行如下所示:

C:\Users\Dan\workspace\Test\src>dir
 Volume in drive C is Acer
 Volume Serial Number is ECB2-5E39

 Directory of C:\Users\Dan\workspace\Test\src

17/09/2012  18:15    <DIR>          .
17/09/2012  18:15    <DIR>          ..
17/09/2012  18:32               723 Test.class
16/09/2012  20:51               353 Test.java
17/09/2012  18:32             3,641 TLexer.class
15/09/2012  21:35 …
Run Code Online (Sandbox Code Playgroud)

java command-line antlr

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

标签 统计

.net ×1

antlr ×1

c# ×1

command-line ×1

dependency-injection ×1

java ×1