[Pythonnet] Python to c# long conversion time

Hi,
I'm using Pythonnet to import proprietary python package from Windows Application. When my python package return a large byte array in C# world, the type conversion takes lot of time.
To illustrate this long conversion time, I made a simple example:
1. A Python package with a method which return a byte array: class MyClass: @staticmethod def get_bytes_from_py(): array = np.arange(0, 720000, dtype=np.uint8) return bytes(array)
1. An application console to call my Python package and which convert 'bytes' type into 'byte[]' type
static void Main(string[] args) { Runtime.PythonDLL = "c:\\Python38\\python38.dll"; PythonEngine.Initialize();
Stopwatch st = new Stopwatch(); st.Start();
using (Py.GIL()) { dynamic myPackage = Py.Import("mypackage"); dynamic myClass = myPackage.MyClass(); dynamic myPyByteArray = myClass.get_bytes_from_py();
long t0 = st.ElapsedMilliseconds; byte[] myCsharpByteArray = myPyByteArray; long t1 = st.ElapsedMilliseconds;
Console.WriteLine("Conversion takes {0}ms", t1-t0); }
st.Stop(); }
1. The console output:
"Conversion takes 303ms"
Is this the right way for this conversion?
Environment: Python: v3.8.10 Pythonnet:
* Pypi: v2.5.2 * Nuget : 3.0.0-preview2022-06-03 Windows 10 Pro .NET framework 4.7.2
Regards, Jordan GUILLOT

Thanks for your answer.
In my .Net example: ... long t0 = st.ElapsedMilliseconds; PyBuffer myarr = myPyByteArray.GetBuffer(); byte[] myCsharpByteArray = new byte[(int)myarr.Length]; myarr.Read(myCsharpByteArray, 0, (int)myarr.Length, 0); long t1 = st.ElapsedMilliseconds; ...
Now the conversion takes less than 10 ms.
Thanks, Jordan
participants (3)
-
Jordan GUILLOT
-
jordan.guillot@avalun.com
-
LOST _