谢谢你的回复!
串口的功能是读取检测点发过来的数据,每个监测点有两块CPU(冗余),每个监测点发过来的数据基本上是一样的。数据包含是个字节,第一个字节有CPU的地址,其他的都相同。6个串口读六个点的数据。串口发过来的数据可以说无关联。CPU都是同时发,发送间隔大概在180ms左右。数据表,有是一个字段。每快CPU接收的数据,建一个表来储存。

解决方案 »

  1.   

    你可以为每个检测点都创建一个List<string> 集合来保存发过来的数据,判断一下,当集合元素大于一定数量时,再一次性插入到数据库表,操作完之后,再清空集合。这样可以减少操作数据库的次数。你可以尝试一下180m产生一条数据,一个串口1小时就有2万条了
      

  2.   

    没有那么多,在接收过来数据后,判断是否和上一条接收的一样,如果一样,就更新下表中的时间
    建表时,在字段中加入了系统时间。我现在是创建一个List<byte[]>,用来接收6个串口接收过来的数据。
      

  3.   


    ConcurrentBag<T> 类 :线程安全的无序集合。
      

  4.   

    在你给数据库写数据的时候跳出串口控件的线程就好了   Invoke(new MethodInvoker(delegate(){  。数据库写入语句}
                                {
      

  5.   


    ConcurrentBag<T> 类 :线程安全的无序集合。
    大神可否具体一点呢?
      

  6.   

    这样串口接收会不会中断呢?如果用你的方法,代码是否如下?;
     public void JZ_RecePort1_DataReceived_JZ(object sender, SerialDataReceivedEventArgs e, byte[] bits)
             {
                 Invoke(new MethodInvoker(delegate(){  。数据库写入语句}
                                 { 
                Com_Receive[0]= utility.ByteArrayToBinaryString(bits);
             }
             public void JZ_RecePort2_DataReceived_JZ(object sender, SerialDataReceivedEventArgs e, byte[] bits)
             {
    I                        nvoke(new MethodInvoker(delegate(){  。数据库写入语句}
                                 { 
                 Com_Receive[1] = utility.ByteArrayToBinaryString(bits);     
             }
      

  7.   

    这样串口接收会不会中断呢?如果用你的方法,代码是否如下?;
     public void JZ_RecePort1_DataReceived_JZ(object sender, SerialDataReceivedEventArgs e, byte[] bits)
             {
                 Invoke(new MethodInvoker(delegate(){  。数据库写入语句}
                                 { 
                Com_Receive[0]= utility.ByteArrayToBinaryString(bits);
             }
             public void JZ_RecePort2_DataReceived_JZ(object sender, SerialDataReceivedEventArgs e, byte[] bits)
             {
    I                        nvoke(new MethodInvoker(delegate(){  。数据库写入语句}
                                 { 
                 Com_Receive[1] = utility.ByteArrayToBinaryString(bits);     
             }如果bits这个数组就是你最终需要存到数据库中的那么就可以这样