Foxtable(狐表)用户栏目专家坐堂 → 多人同时使用时系统卡死


  共有74人关注过本帖树形打印复制链接

主题:多人同时使用时系统卡死

帅哥,在线噢!
drcqh
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:349 积分:3937 威望:0 精华:0 注册:2013/1/7 17:39:00
多人同时使用时系统卡死  发帖心情 Post By:2025/5/11 22:19:00 [只看该作者]

请教老师,项目使用OpenQQ实现数据的同步,但在多人使用时如有一人在操作,其它电脑就卡死了,这是什么原因?如何解决

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113801 积分:579584 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/5/11 22:35:00 [只看该作者]

使用的什么数据库?

 回到顶部
帅哥,在线噢!
drcqh
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:349 积分:3937 威望:0 精华:0 注册:2013/1/7 17:39:00
  发帖心情 Post By:2025/5/12 10:59:00 [只看该作者]

sql server


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113801 积分:579584 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/5/12 11:46:00 [只看该作者]

Foxtable的事件都是按顺序处理的,同一个事件多人触发,会等待前面的处理完毕。如果过于频繁的更新数据并更新同步,是会有卡这种情况的。

方便把服务端openqq的事件发上来看看能不能优化一下。

 回到顶部
帅哥,在线噢!
drcqh
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:349 积分:3937 威望:0 精华:0 注册:2013/1/7 17:39:00
  发帖心情 Post By:2025/5/12 12:49:00 [只看该作者]

一、服务端:

1、ReceivedMessage事件:

    If e.Message = "+user+" Then  '如果收到"+user+"信息时,重新加载用户表

        DataTables("Users").Load()

    End If

    Dim msg As String = e.Message

    If msg.StartsWith(":g") AndAlso msg.EndsWith("g:") Then

        msg = msg.SubString(2, msg.Length - 4)

        If flbhs.ContainsKey(msg) Then '如果存在这个月的编号.flbhs为全局变量

            flbhs(msg) = flbhs(msg) + 1 '将该月最大编号加1

        Else

            flbhs.Add(msg,1) '如果这个月的首次编号,则编号等于1

        End If

   End if

2、UserLogging事件:

     If e.User IsNot Nothing Then

          e.Success=True

          For Each u As UserInfo In users

             If u.Name<>e.User.Name Then

                 If u.Group>"" Then

                    e.Buddies.Add(u.Group & "." & u.Name)

                 End If

             End If

           Next

   Eles If

        e.ReturnValue = flbhs(msg)

   End If


二、客户端:

1、ReceivedMessage事件:

Dim msg As String = e.Message

'MessageBox.Show("我是客户端接收到的信息:" & msg)

If msg.StartsWith("U#") Then '表示修改了某行

    Dim pts() As String = msg.Split("#")

    If pts.Length = 3 Then

        Dim dr As DataRow = DataTables(pts(1)).Find("[_Identify] = " & pts(2))

        If dr IsNot Nothing  Then

            dr.Load() '重新加载此行

        End If 

    End If


ElseIf msg.StartsWith("A#") Then '表示增加了行

    Dim pts() As String = msg.Split("#")

    If pts.Length = 3 Then

        DataTables(pts(1)).AppendLoad("[_Identify] = " & pts(2)) 

    End If

ElseIf msg.StartsWith("D#") Then '表示删除了行

    Dim pts() As String = msg.Split("#")

    If pts.Length = 3 Then

        DataTables(pts(1)).RemoveFor("[_Identify] = " & pts(2)) 

    End If

ElseIf msg.StartsWith("M#") Then 'M表示移除行

    Dim pts() As String = msg.Split("#")

    If pts.Length = 3 Then

        DataTables(pts(1)).RemoveFor("[_Identify] = " & pts(2)) '移除行

    End If

    

End If


If msg.StartsWith("+@") Then                      '如: +@|主键|处方号|医生姓名

    Dim pts() As String =msg.Split("|")

    dsfs.add(pts(1) & "|" & pts(2) & "|" & pts(3))  'dsfs为全局变量待收费处方

    Forms("信息提示窗口").Open

End If




 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113801 积分:579584 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/5/12 13:35:00 [只看该作者]

如果是某个客户端大批量的更新、新增或者删除行,建议就不要使用这个功能了,建议直接发个消息给客户端提醒手工更新吧!

 回到顶部