Я хочу сделать код python, но это требует большого количества вычислений. Я подумал, что было бы хорошо написать какой-нибудь метод на основе c# и вызывать dll из python. Для тестирования я написал простой код (см. Ниже). Вот пример кода в c#:
namespace TestFrameWork
{
public class Class1
{
public static float Summ(float[][] arr, int rowsHeight, int colsWidth)
{
float value = 0;
for (int col = 0; col < colsWidth; col++)
{
for (int row = 0; row < rowsHeight; row++)
{
value += 1;
}
}
return value;
}
}
}
И тест:
namespace main
{
class Program
{
static void Main(string[] args)
{
float[][] inputs = Enumerable
.Range(0, 4000)
.Select(i => new float[33000])
.ToArray();
var watch = System.Diagnostics.Stopwatch.StartNew();
var result = Class1.Summ(inputs, 4000, 33000);
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
Console.WriteLine(result);
Console.WriteLine($"Elapsed time: {elapsedMs} ms");
}
}
}
И код для загрузки метода из Python:
import numpy as np
import clr
import time
w = 4000
h = 33000
image = np.ones((h,w))
clr.AddReference(r"C:\Users\nagym\source\repos\TestFrameWork\bin\Debug\TestFrameWork.dll")
from TestFrameWork import Class1
image1 = image.data.tolist()
start = time.time()
result = Class1.Summ(image1,w,h)
print(f"Elapsed time c# : {(time.time() - start)*1000} ms")
Результаты:
VS C# -> Elapsed time: 318 ms
Python -> Elapsed time c# : 24567.59548187256 ms
Использование Visual Studio для запуска кода C# выполняется намного быстрее. Но почему? Я использую тот же файл DLL.