Please, use myPyByteArray.GetBuffer() and the PyBuffer.Read method to copy from a NumPy array.
I created a feature request to make the default conversion mechanism take advantage of PyBuffer some time in the future.
Regards,
Victor
From: Jordan GUILLOT
Sent: Monday, June 27, 2022 8:19 AM
To: pythonnet@python.org
Subject: [Python.NET] [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:
class MyClass:
@staticmethod
def get_bytes_from_py():
array = np.arange(0, 720000, dtype=np.uint8)
return bytes(array)
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();
}
“Conversion takes 303ms”
Is this the right way for this conversion?
Environment:
Python: v3.8.10
Pythonnet:
Windows 10 Pro
.NET framework 4.7.2
Regards,
Jordan GUILLOT