Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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中使用1M记录执行PROC,而无需挂起应用程序和更短的时间#_C#_Sql_Multithreading_Tcp Ip - Fatal编程技术网

C# 如何在C中使用1M记录执行PROC,而无需挂起应用程序和更短的时间#

C# 如何在C中使用1M记录执行PROC,而无需挂起应用程序和更短的时间#,c#,sql,multithreading,tcp-ip,C#,Sql,Multithreading,Tcp Ip,我对如何选择正确的软件设计模型来为下面的scanario编写高效的代码感到困惑 我有一个生物识别设备(套接字通信)和相同的设备 IP等详细信息在数据库中(SQL server 2012)。 现在应用程序(C#)需要 连接到设备并 从DB获取此设备的信息 并推入同一设备。并将状态结果更新到GUI中 在这里,这些设备有时是100台 为此,我编写了一个代码,但这并不能有效地完成这项任务,我的意思是需要更多的时间来完成,而且速度非常慢 到目前为止,我做到了 for(dev_count) {

我对如何选择正确的软件设计模型来为下面的scanario编写高效的代码感到困惑

  • 我有一个生物识别设备(套接字通信)和相同的设备 IP等详细信息在数据库中(SQL server 2012)。 现在应用程序(C#)需要
  • 连接到设备并
  • 从DB获取此设备的信息
  • 并推入同一设备。并将状态结果更新到GUI中
在这里,这些设备有时是100台

为此,我编写了一个代码,但这并不能有效地完成这项任务,我的意思是需要更多的时间来完成,而且速度非常慢

到目前为止,我做到了

for(dev_count)
{
   if(check device is valid )
{
// read the device details 
 // Here creating thread and loading the emp details to device 
   Thread t1 = new Thread( loademptoDevice());
}

void loademptoDevice()
{
  // here connecting SQl connection and get teh details and load into device socket communication
}
  • 像这样,我已经编码,但它给穷人的反应
所以我需要有人给我好的软件设计模式来解决这个问题


提前感谢你没有足够的关于你的算法等的信息。但是从广泛的角度来看,我相信你遇到了与你的插入相关的问题。SQL Server insert语句适用于小数据或变化很大的集合,但您尝试的是批量插入。您将遇到一个算法问题,因为每个insert语句都会根据数据库的约束进行验证

您可能需要研究如何使用SQL批量复制API,或者为此创建SQL Server集成服务(SSIS)包。这将在一次过程中执行数据写入,然后使用批处理验证约束,这将显著提高性能

其次,针对SQL的线程化是毫无意义的,因为您的IO将比您的磁盘慢1000倍。您应该有一个线程来完成所有的数据库写入,这样数据库就可以尽可能地优化活动


最后,如果您使用的是硬件设备,我认为您可能有一个性能不太好的驱动程序。我不知道您是将数据提取为单个块还是使用多个IO请求,但这肯定会降低应用程序的速度。您是否尝试过测量从单个设备提取数据所需的时间,然后并行尝试两个线程,看看是否有任何改进?您可能会发现,最好只使用两个线程,一个线程提取数据,然后在从设备提取数据时第二次开始插入数据。如果并行提取确实有帮助,那么就扩大到计算机上可用CPU内核的数量。

我不理解锁定方法的价值。您介意更详细地介绍锁的使用吗?所有线程都使用相同的方法来执行该过程。所以对于线程同步,我使用lock关键字来实现这个方法,为什么您仍然锁定单个DB连接,为什么要使用多个线程?这些线在做什么重的事情吗?如果是这样的话,同时运行100秒并不是那么好。如果没有,锁定将使它几乎作为一个线程运行。我忘记了这一点,即)针对SQL的线程。。谢谢你,谢谢你的宝贵建议。我忘记了这一点,即)针对SQL执行线程。顺便问一下,你能解释一下我什么时候应该在什么类型的场景中创建嵌套线程吗?我能给你的最好建议是测量然后优化。