我只是 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++ 函数的两倍。
像这样测试:
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++ 更快?