四月 12, 2013

C# import dll的P/Invoke调用在性能上的损失

Written by

    Net Framework提供了P/Invoke方式从托管代码中调用非托管的本地Dll,但是Micorsoft表示P/Invoke的性能并不是很好,远远达不到本地代码调用本地代码Dll的性能,所谓P/Invoke的性能不好并非是本地代码的执行效率问题,P/Invoke不会影响到非托管代码的执行,只是调用过程中的开销比较大,也就是说高密度频繁调用小量的高效率代码的代价可能会超过纯粹的托管代码,其效率损耗主要在托管类型与本地类型的相互转换上,以及非托管Dll的加载与释放上,所以使用P/Invoke非常适合足够规模一整块的高效率代码调用,而非频繁的小规模调用,小规模高密度频繁的P/Invoke调用往往在性能上得不偿失。

Category : C#

Tags :

Comments

One Response

  1. zwcloud说道:

    我想说,主要还是看程序写得如何。你所提到的“托管类型与本地类型的相互转换”通过使用blittable类型,是完全可以避免的。具体可以看这个:https://msdn.microsoft.com/en-us/library/75dwhxf7.aspx

发表评论

电子邮件地址不会被公开。

Proudly powered by WordPress and Sweet Tech Theme