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

スポンサーサイト

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

Boo: C#とのパフォーマンス比べ

                
Booのパフォーマンスはどの程度だろう。実用に耐えるものか。簡単な計算や操作をさせてみて、C#と比較してみる。

書いてみたコード、スクリプトをページ下部に並べる。処理としては、単純な浮動小数計算の反復10000回、文字列連結の反復10000回と、COMオブジェクトを使った約4000個の音楽ファイルのメタ情報取得をさせた。結果はBooがC#に遜色ないどころか、Booのパフォーマンスが若干ながら勝っているように見えた。Booのほうがコンパイラが優秀ということだろうか。
環境はWin 7(64bit), Intel i3 M370, .NET 4.0
BooのコンパイラはMSBuild 4.0。C#はC# 5.0だった。

13042101.jpg

using System;
using System.Diagnostics;
using System.Collections.Generic;
using WMPLib;

namespace CsBench
{
class Program
{
static int trial = 20;

static double FloatBench()
{
var li = new List<double>();
for(int t=0; t<trial; t++)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
float num;
for(int x=0; x<10000; x++)
{
num = (float)x * 3.14F;
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
li.Add(ts.TotalSeconds);
}
li.Sort();
return li[0];
}

static double StrBench()
{
var li = new List<double>();
for(int t=0; t<trial; t++)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
string mozi = "hoge";
for(int x=0; x<10000; x++)
{
mozi = String.Concat(mozi, "hoge");
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
li.Add(ts.TotalSeconds);
}
li.Sort();
return li[0];
}

static List<object> getAudioCollection()
{
var wmp = new WindowsMediaPlayerClass();

var col = wmp.mediaCollection.getByAttribute("MediaType", "audio");
var totalInCollection = col.count;

var collection = new List<object>();
for (var i=0; i<totalInCollection; i++)
{
var item = col.Item[i];
collection.Add(new string[]{item.getItemInfo("Title"),
item.getItemInfo("artist"),
item.getItemInfo("WM/AlbumTitle"),
item.getItemInfo("SourceURL")});
}
return collection;
}

static double WMPCollectionBench()
{
Stopwatch sw = new Stopwatch();
sw.Start();
var hoge = getAudioCollection();
sw.Stop();
return sw.Elapsed.TotalSeconds;
}

public static void Main()
{
List<double> li = new List<double>();
var t = FloatBench();
li.Add(t);
t = StrBench();
li.Add(t);
t = WMPCollectionBench();
li.Add(t);
foreach(var x in li)
{
Console.WriteLine(x);
}

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}


}
}


import System
import System.Diagnostics
import WMPLib

trial = 20
benchs = []

def FloatBench() as double:
li = []
for t in range(trial):
sw = Stopwatch()
sw.Start()
num as single
for x in range(10000):
num = x * 3.14

sw.Stop()
li.Add(sw.Elapsed.TotalSeconds)
mini = li.Sort()[0]
return mini

def StrBench() as double:
li = []
for t in range(trial):
sw = Stopwatch()
sw.Start()
mozi = "hoge"
for x in range(10000):
mozi = String.Concat(mozi, "hoge")

sw.Stop()
li.Add(sw.Elapsed.TotalSeconds)
mini = li.Sort()[0]
return mini

def getInfo(item as IWMPMedia) as List:
#collect the data about the item
data = [item.getItemInfo("Title"),
item.getItemInfo("artist"),
item.getItemInfo("WM/AlbumTitle"),
item.getItemInfo("SourceURL"),
]

return data

def getAudioCollection() as List:
wmp = WindowsMediaPlayerClass()

col = wmp.mediaCollection.getByAttribute("MediaType", "audio")
totalInCollection = col.count

#Loop through every item in the collection
// collection = [getInfo(col.Item[i]) for i in range(totalInCollection)]
collection = []
for i in range(totalInCollection):
item = col.Item[i]
collection.Add([item.getItemInfo("Title"),
item.getItemInfo("artist"),
item.getItemInfo("WM/AlbumTitle"),
item.getItemInfo("SourceURL"),
])
return collection

def WMPCollectionBench():
sw = Stopwatch()
sw.Start()
hoge = getAudioCollection() as List
sw.Stop()
return sw.Elapsed.TotalSeconds


benchs.Add(FloatBench())
benchs.Add(StrBench())
benchs.Add(WMPCollectionBench())

print benchs

print "Press any key to continue . . . "
Console.ReadKey(true)
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

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

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