贴一下最主要的部分,用process.popen管道实现服务器程序整合,并且不会出现原本的黑窗口。
回复#7 @hi_aardio :
openpyxl效率也还不错,10000行循环写入大约500毫秒,100000行循环写入6秒。
读取的速度比写入快1倍。
然后整体打包的话,不压缩14M,压缩后9M。
体积大主要是因为把python3.10打包进去了,openpyxl体积其实很小的,也完全可以脱离office读写excel。
新年快乐!
回复#1 @itusers :
你这种最好先用C#实现一遍,如果在C#上没问题,再把相同代码转换为aardio。
有问题先在C#上排查,aardio支持C#调用不表示可以用aardio开发C#
回复#29 @rays2004 :
那么大量的数据读写用excel本身就不合理啊,excel的作用是为了便于数据量交小的情况下,可视化显示数据或者图形。
大数据量的话,肯定首选是数据库了,而且对于大数据量的读写也不应该依赖图形界面,没有图形界面的话,速度可以快很多。
没啥,一开始以为做的是动态屏保,忽略就行了
现在画图的dll越来越多了
回复#10 @itusers :
这个dll的参数类型又不是你定义的,要看作者是怎么定义的,你私自去申明了作者的参数类型你觉得有意义吗?
例如,我定义了一个加法程序:
func add(a, b int) int { return a+b }要求传入2个整数,返回也是整数。
现在你私自申明说,我要传2个结构体,又不更改原始的程序,你觉得可行吗?
MQTT协议其实也是建立在tcp协议上的,理论上来说只要支持MQTT协议的设备都可以进行跨平台通讯。
我用Golang实现了一下,感觉挺好玩的。
我想到一个使用场景,就是家里的电热水器。平时上班的时候电热水器可以关掉,而回家的时候电热水器自动启动,这样比较省电。我经常是忘记回家去开电热水器,等想洗澡的时候又要等很长时间。
package main import ( "fmt" mqtt "github.com/eclipse/paho.mqtt.golang" "ti受这个帖子的启发,用Golang写了一个文件预览服务器,只要浏览器支持的格式都可以直接打开预览,包括文字、图片、音频、视频、pdf等等。
package main import ( "fmt" "github.com/gin-gonic/gin" "net/http"海康的Vision Master就有车牌识别的例子,而且VM支持tcp通讯,识别完以后可以用tcp发送给aardio处理。 我是随手找了一张图试了一下,真的要做好识别是要进行字库训练的,VM有字库训练模块,还有深度学习模块,可以提高识别速度和准确度。
回复#5 @我高兴 :
可以看aardio里的rpc例程,其实rpc还分为基于tcp连接的和基于http连接的rpc,例程里也分别有基于http的jsonrpc和基于tcp的jsonrpc。
另外,rpc本身可以不用进行json序列化,但是如果希望跨平台或者跨系统的调用,比如我上面的例子中用python程序跨系统调用Golang的rpc服务,这样就必须有统一的标准,jsonrpc就是这个统一的标准,把rpc进行json序列化后,各个系统和各个平台之间就能相互调用了。
如果用Golang的jsonRPC客户端,同样进行10000次高并发请求
package main import ( "fmt" "net" "net/rpc" "net/rpc/jsonrpc" "time" ) type ReplyStruct struct { Success bool Result string } func main() { st := time.Now().UnixMilli() ch := make(chan striGolang性能优异,但Python的多线程就没那么高效了,所以,如果自己的电脑不太行的话,不要轻易尝试10000组高并发,很容易把电脑搞崩溃的
Golang原生支持多线程(协程),所以处理高并发有非常优异的性能表现,非常适合用来搭建服务器。
这里用Golang搭建jsonRPC服务器,Python客户端高并发10000组请求压力测试
Golang jsonRPC服务器:
package main import ( "net" "net/rpc" "net/rpc/jsonrpc" "strings" ) type MyFunc struct进一步,golang的优势其实是原生的多线程支持,所以对于这种排序问题,尤其是排序数量非常大的话,我们可以利用golang的多线程进行排序。
我对比了一下使用单线程和多线程的性能差异:
当数据量为一百万时(1000x1000的数组)
使用单线程排序1000x1000的数组,耗时 2477 ms 使用多线程排序1000x1000的数组,耗时 1795 ms 效率提升 37.99 %packag最近上手了golang,瞬间觉得python不香了,虽然同样的代码python要简洁得多,但性能来说golang甩开python几个数量级了。
你的这个排序功能,用golang实现了一下:
package main import ( "encoding/json" "fmt" "sort" ) func d2Sort(d [][]int) [][]int { nd := []string{} for _, arr := range d {回复#19 @shingu :
其实作为数据库来说,一般是不建议删除的,这样的好处是可以保证所有数据的记录位置是不变的。
如果真要“删除”某数据的话,你可以增加一列“删除列”作为标记,当“删除列”为true时,即表示该条记录无效。
这样即使以后想要恢复数据,只要重新修改“删除列”为false即可。
回复#1 @admin :
还好啦,低配的话也就1万多。
主要它是用在工业上的,稳定和效率是第一位。
个人用的话,首选肯定是opencv
海康威视的Vision Master视觉平台提供非常完备的视觉算法,只需要通过简单的模块拖拽就可以实现视觉识别/测量等复杂算法,同时Vision Master也支持TCP通讯,这样就可以把识别结果或测量数据实时传输出来。
aardio建立tcp服务也是非常方便的,这样就可以实时接收数据进行处理
import console; import wsock.tcp.server; var tcpServer = wsock.tcp.server("127.0.0.1",7920)回复#6 @admin :
dotNet库里还有不少其他好用的控件,比如WebBrowser,不用额外导入其他库,也能直接调用系统的浏览器。
回复#4 @admin :
我试了一下也是可行的,虽然我以前也从来没这样用过。
TabContol和TabPage都是C#的,里面嵌套了aardio的子窗口winform1.aardio,通过win.setParent绑定过去,功能一切正常。
PS:子窗口winform1要设置成无边框模式,不然难看死了
回复#2 @admin :
不用啊,除了MaterialForm以外,其他控件都是可以直接嵌入aardio里的。
其实,从名字就可以知道,这个库最主要的功能是方便一键换皮肤,它里面有个皮肤管理器,那个才是核心
B站有个视频:
原生的还有MaterialForm式样,侧边栏MaterialDrawer可以自动转换TabControl。
但aardio里不知道怎么样直接改mainForm式样。
MaterialSkin是一个支持皮肤管理的Winform控件库,可以非常方便的切换皮肤主题,原生的主题皮肤也非常美观。
其中“注册服务器”会先启动,然后延时1秒,再启动其他服务器,因为其他服务器启动时会先去注册服务器对比版本信息并获取授权。