C# 静态vs并行循环中的实例,在内存和性能方面更好

C# 静态vs并行循环中的实例,在内存和性能方面更好,c#,.net,performance,optimization,C#,.net,Performance,Optimization,我想知道解决以下问题的更好方法是什么。 我有一种情况,我将进行服务调用和数据库调用,根据输入,我将进行一些计算,并返回这两者之间的一些不匹配 我有下面的示例代码段:如果有人可以建议,使类成为静态的更好,还是实例方法更好,因为调用将来自Parallel.for,多个线程将同时使用它 //Sample Call ..actually will be controllig no of parallel calls using MAxDegreeofparallelism Paralle

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

我有下面的示例代码段:如果有人可以建议,使类成为静态的更好,还是实例方法更好,因为调用将来自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;


    }
}
//示例调用..实际上将使用MAxDegreeofparallelism控制并行调用的数量
对于(1,10,i=>
{
SomeClass c=新的SomeClass();
var res=c.SomeMethod(“测试”、“测试”);
});
公共类
{
私有只读IDbRepository_IDbRepository=null;
私有只读IServiceRepository _IServiceRepository=null;
公共类()
{
_IDbRepository=new DbRepository();//可以执行DI
_IServiceRepositoy=newServiceRepositoy();//可以执行DI
}
//此处返回类型显示为字符串,但可以是错误的新类对象
公共列表方法(字符串param1、字符串param2)
{var err=new List();
var dbData=_idbreepository.GetDbData(param1,param2);
var serviceData=_iservicerepository.GetServiceData(param1,param2);
//基于Servcie数据和DB数据计算误差和返回
//代码逻辑
//多重逻辑
返回错误;
}
}

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

如果这仅仅是几个线程的问题,那么就选择一种使代码简单/可读/易懂的解决方案。使用async/Task而不是并行也是可取的。我们将对此进行大约10万次调用。。。但是32-50个线程并行。。。我在寻找更多关于类为非静态和使用静态类时创建的对象数量的答案。。如何提高性能或内存如果我们谈论的是32-50,我不会使用并行或任何其他类型的线程,我会通过网络来分配“作业”。机器上有多少个内核(虚拟的)?但是如果在其中创建了许多对象,单个静态方法仍然无法获得多大性能。更重要的是,线程中运行的是异步和任务。