Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# Linq到SQL和多CPU性能_C#_Performance_Linq To Sql_Parallel Processing_Cpu - Fatal编程技术网

C# Linq到SQL和多CPU性能

C# Linq到SQL和多CPU性能,c#,performance,linq-to-sql,parallel-processing,cpu,C#,Performance,Linq To Sql,Parallel Processing,Cpu,我对LINQtoSQL的处理器性能和多线程处理有疑问 考虑以下简单代码,该代码从表中选择项以在第二个表中创建新条目(我知道有更好的方法,这只是一个示例): 我尝试在我的工作站上执行此示例,输入了大约50000条。花了大约32秒/32秒 我试图在一个强大的prod服务器上的同一个数据库上执行相同的代码,花了54秒 实际上,我做了几个测试,结果如下: 英特尔酷睿2双核E8400@3.00GHz:~32s 英特尔酷睿I5-3320M@2.60GHz:~32s 英特尔酷睿I5-2400@3.10GHz

我对LINQtoSQL的处理器性能和多线程处理有疑问

考虑以下简单代码,该代码从表中选择项以在第二个表中创建新条目(我知道有更好的方法,这只是一个示例):

我尝试在我的工作站上执行此示例,输入了大约50000条。花了大约32秒/32秒 我试图在一个强大的prod服务器上的同一个数据库上执行相同的代码,花了54秒

实际上,我做了几个测试,结果如下:

  • 英特尔酷睿2双核E8400@3.00GHz:~32s
  • 英特尔酷睿I5-3320M@2.60GHz:~32s
  • 英特尔酷睿I5-2400@3.10GHz:~33s
  • 英特尔至强E5620@2.40GHz:~47s
  • 英特尔至强E5-26400@2.50GHz:~52s
显然,我在每台机器上都试了几次,我的问题很明显:为什么在生产服务器上性能较低

我注意到,即使prod服务器通常效率更高(24进程:2个物理量,6个心脏,2个线程)

在LINQtoSQL中,我知道并行查询是不可能的,而在LINQtoObject中,则是不可能的。所以它只在prod上使用一个线程,最大频率为2.5Ghz,在我的工作站上使用一个线程,最大频率为3Ghz。是这样吗


如果您能帮助我:)对不起,我的英语不好。

Linq to SQL生成一个SQL查询并将其发送到SQL数据库。SQL查询分析器采用并行性。因此,您需要忘记LINQ to SQL,获取它正在生成并运行的SQL,检查不同环境中的执行计划。也许生产服务器更繁忙-我真的认为在这种情况下CPU不是一个真正的问题。表和磁盘IO中的插入影响更大。生产数据库是否有更多数据?更多索引?Linq-2-sql用于这样的批插入时效率非常低。基本上,它将为每条记录生成一个“插入…”,而基于集合的插入只为答案生成一个.thx。我很确定这是CPU问题,因为prod服务器是全新的,没有任何其他数据库。我认为问题在于我只能使用单进程,我的工作站和prod服务器之间的区别在于频率(2,5GHz vs 3,0GHz),即使我的prod服务器更强(多心脏…),我的结果也更差。。。
var db = new BaseDataContext(connectionString);
var query = from i in db.MyTable
            select i;

foreach (item in query)
    db.MySecondTables.InsertOnSubmit(new MySecondTable { id = item.id });

db.SubmitChanges();