狐表异步里里DataTable能用Find和不能用SqlFind,1小心被坑,2不要滥用异步!并附上实战项目里,BS前后端分离下的接口请求平均耗时统计

发表日期: 2021-02-24

1.异步的DataTable不能用SQLxxx

所有Sqlxxx都不能用

例如新建一个内部函数

Dim fr As DataRow = DataTables("ItemInfo").SqlFind("a=1")

经过测试:

在同步里,以上执行100次不出错

在异步里,大约有90次是fr为Nothing。肯定是因为SqlFind里面有共有变量,导致返回出问题

有人问:为什么有时候我异步里DataTables("xx").SqlFInd并没有报错呢?

那是因为几次异步函数,没同时发生,你运气好而已!运气不好,你就呵呵哒了,程序直接崩溃,死亡状况如下

file

完全无法被捕获的异常,日志无法查看出来,直接整个程序崩溃

狐表官方强烈建议:就算是SqlCommmand弄出来的临时DataTable,也不要去Sqlxxx

还是那句话,不要滥用异步!线程创建要250ms,然后这个SqlCmd创建表也要400ms。然而根据5个Web项目的实测统计,大部分的响应请求都在100-200ms之间

file

file

2.异步的DataTable可以用Find之类

新建一个内部函数

Dim fr As DataRow = DataTables("ItemInfo").Find("a=1")

经过测试:

在同步和异步里里,以上执行1000000次都不出错

本质上跟狐表文档里演示的读取全局PublicInteger一个效果,所以是没问题的

3.异步的DataTable还可以用LoadFilter之类

Dim cmd As New SqlCommand()
cmd.ConnectionName = "Orders"
cmd.CommandText = "Sele ct * From Orders Where 1=2"
Dim dt as DataTable = cmd.ExecuteReader() 
dt.LoadFilter="1=1"
dt.LoadTop="100 percent"
dt.load(False)
Output.Show(dt.DataRows.Count)
'结果是不是0,说明能加载



随便看看
商务联系QQ : 2385350359

Copyright 2016-2023 江门蓬江区华越科技公司 版权所有 | 承接软件定制开发,欢迎联系
粤ICP备19148806号-5