Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 并行存储在数据库中_C#_Wpf_Performance_Parallel Processing - Fatal编程技术网

C# 并行存储在数据库中

C# 并行存储在数据库中,c#,wpf,performance,parallel-processing,C#,Wpf,Performance,Parallel Processing,我有很多数据要导入我的数据库 这些数据需要处理、过滤、连接等。因此,一切都是通过对象完成的,在开始之前携带所有表,并将所有对象保存到最后 在所有处理之后,我运行命令保存。这花的时间太长了。我想练习一种不同的方法: int count1=0; int middle=allCSV.Length/4; int count2=中间; int count3=中间*2; int count4=中间*3; 平行。对于(0,4,新动作((i)=> { 开关(一) { 案例0: 对于(int j=0;j

我有很多数据要导入我的数据库

这些数据需要处理、过滤、连接等。因此,一切都是通过对象完成的,在开始之前携带所有表,并将所有对象保存到最后

在所有处理之后,我运行命令保存。这花的时间太长了。我想练习一种不同的方法:

int count1=0;
int middle=allCSV.Length/4;
int count2=中间;
int count3=中间*2;
int count4=中间*3;
平行。对于(0,4,新动作((i)=>
{
开关(一)
{
案例0:
对于(int j=0;j
那是正确的?什么是优化我的流程的最佳方式

考虑一下,使用的是最新一代的计算机,数据库是MySQL


用于保存的ORM非常简单,没有任何类型的优化。

看起来您将其过度复杂化了。不是吗

Parallel.ForEach(allCsv, Save);
更直截了当


当然,您是否能从并行化操作中获得任何性能优势是有争议的。

您似乎在将其过度复杂化。不是吗

Parallel.ForEach(allCsv, Save);
更直截了当


当然,并行化操作是否会带来性能方面的好处还有争议。

除非可以在表中进行多次插入有一段时间,多线程应用程序不会有帮助。我在SQL Server上遇到了这个问题。插入/更新花费了很长时间,因为我们做了这么多,它们都必须是原子的,所以一次插入/更新意味着整个表被锁定。我不知道mySQL是否能更好地处理表级锁定,但我对此表示怀疑


最好的选择可能是采用以数据库为中心的解决方案。执行事务、大容量插入、ETL等可能是比编写一些C代码更好的解决方案。

除非您可以对表进行多次插入有一段时间,多线程应用程序不会有帮助。我在SQL Server上遇到了这个问题。插入/更新花费了很长时间,因为我们做了这么多,它们都必须是原子的,所以一次插入/更新意味着整个表被锁定。我不知道mySQL是否能更好地处理表级锁定,但我对此表示怀疑


你最好的选择可能是看一个以数据库为中心的解决方案。执行事务、大容量插入、ETL等可能是比编写一些C代码更好的解决方案。

这样做可能会有问题。例如,每个对象都有X个关系。它们不是对称的对象。如果我让他控制并行性,我可能会失去太多性能ce.Parallel.ForEach将在需要时动态添加线程。通常我通过提供一个设置了MaxDegreeOfParallelism的ParallelOptions对象将其限制为environment.processorcount。这样做可能会有问题。例如,每个对象都有X关系。它们不是对称的对象。如果我让他控制并行性,我可能最终会丢失太多的线程如果需要,formance.Parallel.ForEach将动态添加线程。通常,我通过提供一个设置了MaxDegreeOfParallelism的ParallelOptions对象,将其限制为environment.processorcount。
Parallel.ForEach(allCsv, Save);