gpt4 book ai didi

c# - 如何在不挂起应用程序和减少 C# 时间的情况下使用 1M 记录执行 PROC

转载 作者:可可西里 更新时间:2023-11-01 02:46:13 25 4
gpt4 key购买 nike

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

  • 我有一个生物识别设备(套接字通信)和同一个设备IP等详细信息在数据库(SQL server 2012)中。现在应用程序 (C#) 需要
    1. 连接到设备并
    2. 从数据库获取此设备的信息。
    3. 和推送到同一个设备。并将状态结果更新到 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 插入语句适用于小数据或变化很大的数据集,但您要做的是批量插入。您将遇到算法问题,因为每个插入语句都会根据数据库的约束进行验证。

您可能需要考虑使用 SQL 批量复制 API,或为此创建一个 SQL Server Integration Services (SSIS) 包。这将一次性执行数据写入,然后使用批处理验证约束,这将显着提高您的性能。

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

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

关于c# - 如何在不挂起应用程序和减少 C# 时间的情况下使用 1M 记录执行 PROC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com