Python使用.NET開發的類庫來提高你的程式執行效率

WeskyNet發表於2024-06-16
Python由於本身的特性原因,執行程式期間可能效率並不是很理想。在某些需要自己提高一些程式碼的執行效率的時候,可以考慮使用C#、C++、Rust等語言開發的庫來提高python本身的執行效率。接下來,我演示一種使用.NET平臺開發的類庫,來演示一下Python訪問.NET類庫的操作實現。類庫演示包括.NET Framework、.NET Standard、.NET CORE+環境。
先安裝pythonnet庫
0
首先測試.net framework庫能不能成功。建立一個.net framework的類庫專案
0
開發一個測試類,程式碼如圖所示,提供一個方法來輸出“這是一個.net framework庫的呼叫返回值”
0
編譯以後,生成的dll複製到我的D盤的MyDlls資料夾內備用
0
建立一個python專案,呼叫.NET庫需要先引入clr,clr.AddReference()裡面新增你的類庫地址。instance = FxTest();寫法相當於你用C# 程式碼:var instance = new FxTest();來例項化一個物件。
0
執行Python程式,可以看到.net fx類庫的方法被成功呼叫並返回。
0
測試.net standard專案。新建一個.net standard2.1的專案
0
開發兩個類,一個用來給Python程式呼叫,一個是最終實現。
0
編譯以後,也把類庫檔案丟之前的資料夾內備用。
0
改造下剛才的python程式碼,引用新的.net standard開發的類庫,並執行python程式碼,也可以被成功呼叫。
0
再測試下.net core或以上類庫環境。此處建立一個.net 8類庫專案
0
同樣的,也新建一個測試類,並且提供一個方法給python使用。該方法比前面測試案例多了一個引數輸入。
0
編譯以後,也丟上面用到的資料夾內測試用。
0
繼續改造python程式碼,並執行,發現出錯。
0
對剛才的.net8類庫專案降級為.net6,再重新編譯,然後替換到之前的測試用資料夾內。
0
再重新執行python程式,可以看到被成功呼叫了。說明截止目前,pythonnet只支援到.net6或者也可能到7,7不是LTS版本我就不測試了,但是.net 6是妥妥可以執行,那就代表.net 6、.net 5、netcore3.1以及netcore3.1以下版本都是可以被支援的了。
0
能夠使用.NET來實現一些操作給python呼叫的好處是,可以提高python的一些執行效率。原生python執行效率畢竟可能尷尬一點點。
下面寫一個例子來測試下效率差異。在netstandard類庫裡面新增一個累加方法:
0
Python裡面寫一個計時器,用來對執行方法的計時使用。
0
python裡面也新增一個累加器方法,並且對兩個方法都套上上面的計時器,用於測試耗時開銷。
0
執行程式,檢視執行結果,10000次執行,python耗時0.000997s,.NET庫內的操作耗時約等於0秒
0
看不出太大效果,那就加到1000w次,得到的耗時相差,差不多147倍數。
0
再增大一些,1Y次,效能和上面1KW次比值基本上差不多,157倍數,取箇中間值,相當於150倍效能差距。
0
上面這個只是使用.net standard2.1環境,如果使用更高版本的.net類庫環境,估計還會更加拉大差距。本機的python環境版本為python 3.10.6。
0
以上就是本文章全部內容,如果對你有幫助,歡迎關注我的個人公眾號:【Dotnet Dancer】
如果以上文章內容無法訪問或者圖片丟失,可以觀看我的公眾號原文文章:
https://mp.weixin.qq.com/s/ABlHCDmu7yLE7_aI2Z8sIA

相關文章