【问题标题】:Static vs Instance in Parallel Loop which is better in terms of memory and performace并行循环中的静态与实例在内存和性能方面更好
【发布时间】:2020-04-18 12:05:12
【问题描述】:

我想知道解决以下问题的更好方法是什么。 我有一种情况,我将进行服务调用和数据库调用,并且根据输入我将进行一些计算并返回这两者之间的一些不匹配。

我有以下示例 sn-p:如果有人可以建议将类设为静态更好还是实例方法更好,因为调用将来自 Parallel.for,多个线程将同时使用它。

    //Sample Call ..actually will be controllig no of parallel calls using MAxDegreeofparallelism
    Parallel.For(1, 10, i =>
        {
            SomeClass c = new SomeClass();
            var res=c.SomeMethod("test", "test");
        });
    public class SomeClass
{
    private readonly IDbRepositroy _IDbRepository =null;
    private readonly IServiceRepositroy _IServiceRepositroy = null;
    public  SomeClass()
    {
        _IDbRepository = new DbRepository(); // Can do DI 
        _IServiceRepositroy = new ServiceRepositroy(); // Can DO DI

    }

    //Here Return Type is shown as string but can a new class object of errors
    public List<Errors> SomeMethod(string param1,string param2)
    { var err = new List<Errors>();
        var dbData = _IDbRepository.GetDbData(param1, param2);
        var serviceData = _IServiceRepositroy.GetServiceData(param1, param2);

        //Based on Servcie Data and DB data Calculate erros and return
        //Code Logic
        //Multiple Logic
        return err;


    }
}

【问题讨论】:

  • 如果只是几个线程的问题,请选择使您的代码简单/可读/可理解的解决方案。最好使用 async/Task 而不是 Parallel。
  • 我们将对此进行大约 100,000 次调用...但是并行处理 32-50 个线程...我正在寻找更多关于在类非静态时创建的对象数量以及何时创建的答案我们使用静态类。性能或内存如何更好
  • 如果我们谈论的是 32-50,我不会使用 Parallel 或任何其他类型的线程,而是通过网络分发“作业”。你的机器上有多少个核心(虚拟)?
  • 但是,如果您在其中创建许多对象,那么单个静态方法仍然不会获得太多性能。更重要的是,线程中运行的任何东西都使用异步和任务。

标签: c# .net performance optimization


【解决方案1】:

在我看来,准备一个提供一组类实例的缓存并在需要时从缓存中获取实例是有意义的。最好避免在执行并行操作期间创建新的类实例,因为它可能会导致特定的 GC 操作可能会阻塞所有正在运行的线程(通常它们在单个线程中运行,但如果它们阻塞应用程序,这是一个问题)。顺便说一句:检查正在发生的事情的最佳方法是使用一些配置文件工具。我更喜欢 Microsoft 提供的 PerfView,因为它有助于诊断 GC 问题。

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多