主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

IronPython: コンパイルされたC#のクラスを使う

                
DLL化されたC#のクラスをIronPythonから使ってみる。C#のクラスは下記の通り。
CsFromIpy.dll
using System;
using System.Collections.Generic;

namespace CsFromIpy
{
public class MyClass
{
public string property1 = "string";
public List<string> Method1()
{
var list = new List<string>();
list.Add("str1");
list.Add("str2");
return list;
}

public void Method2(string str)
{
Console.WriteLine(str);
}

public void Calculate()
{
var num = 0;
for (var x=0; x<60000; x++)
{
num = x * 3;
}
}
}
}


IronPythonスクリプトは下記。DLLを参照に加えて、モジュールとしてインポートすれば、基本的にはIronPythonのクラスとなんら変わりなく使える。
単純な計算のループを、IronPythonスクリプトと、DLL化したC#クラスのメソッドで回してみた。結果は16倍程度の差。すこしでも軽くしたい処理はC#に委ねてしまうのが手段だなぁ。C#のクラスは簡単にIronPythonから使えるようなので。
import clr
import System

clr.AddReference("CsFromIpy")
import CsFromIpy

csClass = CsFromIpy.MyClass()

print csClass.property1

list = csClass.Method1()
for x in list:
print(x)
csClass.Method2("from IronPython with C#")

print '\nIronPython VS. C#'
stopwatch = System.Diagnostics.Stopwatch()
stopwatch.Start()
for x in xrange(60000):
num = x * 3
stopwatch.Stop()
print stopwatch.Elapsed
stopwatch = stopwatch.StartNew()
csClass.Calculate()
stopwatch.Stop()
print stopwatch.Elapsed
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。