【发布时间】: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