Python使用.NET开发的类库来提高你的程序执行效率

Python由于本身的特性原因,执行程序期间可能效率并不是很理想。在某些需要自己提高一些代码的执行效率的时候,可以考虑使用C#、C++、Rust等语言开发的库来提高python本身的执行效率。接下来,我演示一种使用.NET平台开发的类库,来演示一下Python访问.NET类库的操作实现。类库演示包括.NET Framework、.NET Standard、.NET CORE+环境。 

先安装pythonnet库

8da7cd6318d921abc3ad00eee2fdc8fa.png

首先测试.net framework库能不能成功。创建一个.net framework的类库项目

11bfc2810f001c8e3cd06bafd9f668de.png

开发一个测试类,代码如图所示,提供一个方法来输出“这是一个.net framework库的调用返回值”

5ea380108134c2a7289b5c278d4f333c.png

编译以后,生成的dll拷贝到我的D盘的MyDlls文件夹内备用

19ca1df2ece67017b3c09b1707adf5a3.png

创建一个python项目,调用.NET库需要先引入clr,clr.AddReference()里面添加你的类库地址。instance = FxTest();写法相当于你用C# 代码:var instance = new FxTest();来实例化一个对象。

456ed9092278b5b37ba9d6c2436a8186.png

运行Python程序,可以看到.net fx类库的方法被成功调用并返回。

e0c021e9b6ae977d744b539a3207fa1b.png

测试.net standard项目。新建一个.net standard2.1的项目

0aa3d311cd918610e5e23f3726158844.png

开发两个类,一个用来给Python程序调用,一个是最终实现。

885560490e58e23d250595823795f2f2.png

编译以后,也把类库文件丢之前的文件夹内备用。

65c39a025fd81c3d07ce103c7746fb49.png

改造下刚才的python代码,引用新的.net standard开发的类库,并运行python代码,也可以被成功调用。

667b9bcd05dcb1d10168148b0bff3487.png

再测试下.net core或以上类库环境。此处创建一个.net 8类库项目

a09752004fca0c3810137ff78abda299.png

同样的,也新建一个测试类,并且提供一个方法给python使用。该方法比前面测试案例多了一个参数输入。

785459a385258ceefc9789ab7f13bde3.png

编译以后,也丢上面用到的文件夹内测试用。

bc26df56620a4c90990d8bbaf3dbe1c3.png

继续改造python代码,并运行,发现出错。

86c9d6fdbc933d4781d27a8511cb51de.png

对刚才的.net8类库项目降级为.net6,再重新编译,然后替换到之前的测试用文件夹内。

185ad824fe384df4b6abbdeccb8bee45.png

再重新执行python程序,可以看到被成功调用了。说明截止目前,pythonnet只支持到.net6或者也可能到7,7不是LTS版本我就不测试了,但是.net 6是妥妥可以运行,那就代表.net 6、.net 5、netcore3.1以及netcore3.1以下版本都是可以被支持的了。

2be871dc67880722c3369efba16e297b.png

能够使用.NET来实现一些操作给python调用的好处是,可以提高python的一些运行效率。原生python执行效率毕竟可能尴尬一点点。

下面写一个例子来测试下效率差异。在netstandard类库里面新增一个累加方法:

722fd0449f668fdbe6b3e41f8d17a166.png

Python里面写一个计时器,用来对执行方法的计时使用。

13b3c5cff1ba32684fabac1876f8c342.png

python里面也新增一个累加器方法,并且对两个方法都套上上面的计时器,用于测试耗时开销。

36a883779c1b29c0cbf9264d5c641e9a.png

运行程序,查看执行结果,10000次运行,python耗时0.000997s,.NET库内的操作耗时约等于0秒

7ce625c398af688cc34ec7bd1dc618fa.png

看不出太大效果,那就加到1000w次,得到的耗时相差,差不多147倍数。

3182643a4b28bfee8de60dca8655fc7b.png

再增大一些,1Y次,性能和上面1KW次比值基本上差不多,157倍数,取个中间值,相当于150倍性能差距。

f3020e115335cffd9327f0fd1fea4661.png

上面这个只是使用.net standard2.1环境,如果使用更高版本的.net类库环境,估计还会更加拉大差距。本机的python环境版本为python 3.10.6

d9b8e5654bc7bdbb536ad50288d5ff79.png

如果以上内容对你有帮助,欢迎点赞、在看、转发和关注。

本人公众号:【Dotnet Dancer】

8898f9716ebef9cd49254b16bc51c721.jpeg

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值