ITPub博客

首页 > 应用开发 > > c# RabbitMQ 内存一直增长,急

c# RabbitMQ 内存一直增长,急

作者:pengjs991111 时间:2019-09-05 09:17:20 0 删除 编辑

using Microsoft.Practices.Unity.Configuration;

using System;

using System.Collections.Generic;

using System.Configuration;

using System.Linq;

using Unity;

using Unity.Resolution;

namespace Utils

{

///

/// 服务定位器类,做依赖注入解析

///

public class ServiceLocator

{

private readonly IUnityContainer container;

public ServiceLocator()

{

var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");

container = new UnityContainer();

section.Configure(container);

}

public static ServiceLocator Instance

{

get { return new ServiceLocator(); }

}

public T GetService<T>()
    {
        return container.Resolve<T>();
    }
    public T GetService<T>(object overridedarguments)
    {
        var overrides = GetParameterOverride(overridedarguments);
        return container.Resolve<T>(overrides.ToArray());
    }

    public object GetService(Type serviectype)
    {
        return container.Resolve(serviectype);
    }

    public object GetService(Type servicetype, object overridedarguments)
    {
        var overrides = GetParameterOverride(overridedarguments);
        return container.Resolve(servicetype, overrides.ToArray());
    }

    private IEnumerable<ParameterOverride> GetParameterOverride(object overridearguments)
    {
        var overrides = new List<ParameterOverride>();
        var argumenttype = overridearguments.GetType();
        argumenttype.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
            .ToList()
            .ForEach(property =>
            {
                var propertyvalue = property.GetValue(overridearguments, null);
                var propertyname = property.Name;
                overrides.Add(new ParameterOverride(propertyname, propertyvalue));
            });
        return overrides;
    }

    public T GetService<T>(ParameterOverrides parameters)
    {
        return container.Resolve<T>(parameters);
    }
}

}

while(true)

{

//消息总线服务器地址

IEventBus result = ServiceLocator.Instance.GetService(

new ParameterOverrides {

{ "connectionFactory",connectionFactory },

{ "context", ServiceLocator.Instance.GetService() },

{ "exchangeName","s" },

{ "exchangeType","direct" },

{ "queueName","ss" },

{ "publisherorconsumer", 1 },

{ "autoAck",true}

});

}

现在的情况是,内存一直不停的增加,检查是由于循环里的这段代码产生的,请问怎么改代码,才能在每次用完 result后,销毁 result ,从而使内存不增长,保存平稳

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/623/viewspace-3161003/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    221
  • 访问量
    778