私はc++の初心者なので、何か間違ったことをしている可能性がありますが、とにかくc ++ dllを作成し、wpfプロジェクトから呼び出します。
c ++コード:
extern "C" __declspec (dllexport) double writeTxt()
{
ofstream mf("c:\\cpp.txt");
for(int i=0;i<999;i++)
{
mf<<"xLine: \n";
}
mf.close();
return 1;
}
C#からコードを呼び出す:
[DllImport(@"C:\Users\neo\Documents\visual studio 2010\Projects\TestDll\Debug\TestDll.dll",
CallingConvention = CallingConvention.Cdecl)]
public static extern double writeTxt();
今、私は実行時間をこのc#関数と比較しようとしています:
double writeTxtCs()
{
StreamWriter sw = new StreamWriter(@"c:\cs.txt");
for (int i = 0; i < 999; i++)
{
sw.WriteLine("Line: " + i);
}
sw.Close();
return 0;
}
ただし、c#関数はc++関数の約2倍の速度です。
このようにテストされました:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
long[] arr = new long[100];
Stopwatch sw = new Stopwatch();
for (int i = 0; i < 99; i++)
{
sw.Start();
//double xxx = writeTxt();
double xxx = writeTxtCs();
arr[i] = sw.ElapsedMilliseconds;
sw.Reset();
}
MessageBox.Show(arr.Average().ToString());
Close();
}
c#関数を実行すると、通常は〜0.65msになり、c ++関数を実行すると、〜1.1msになります。
私の質問は:私は何か間違ったことをしているのですか、それともこのシナリオではc#はc ++よりも本当に速いのですか?