IronPython的速度与其他.net语言相比如何?
我想给出一些我说的内容的来源,但我没有,只是听说过。
有一次,一个编程教授告诉我,关于 .net 和 Python 的一些软件性能测试,结果显示在某些特定项目上,.NET 的表现是 Python 的 5:8。这是他支持 Python 不是那么慢的一个理由。
事情是这样的,我想尝试 IronPython,因为我可以把我最熟悉的网页框架(asp.net)和我最喜欢的语言(Python)结合起来。我在想,使用 Python 的 ASP.NET 程序速度和使用 VB.net 或 C# 的 ASP.NET 程序速度相比怎么样?有没有相关的性能测试数据呢?
另外,IronPython 的速度和其他 .NET 语言相比,不应该是相似的吗?因为 IronPython 和 Python 不同,它需要编译成 .NET 的中间代码。有人能帮我解答这些问题吗?
问候
3 个回答
IronPython的运行速度会比C#慢很多。你可以把这个比较想象成CPython和C之间的差距,不过这个差距要小一些。
你可以开启 .net 的跟踪功能,这样页面底部会显示一些时间信息。你可以用 C#/.Net 做一个应用,再用 Python 做一个应用,然后比较一下它们的运行时间。这样你就能得到一个明确的答案。
老实说,我觉得你还是用 C# 更好,因为开发起来“更快”,因为有 Visual Studio 这个环境帮你,而且运行速度也会更快,因为不需要使用动态语言运行时。
这里有两个有趣的链接,比较了IronPython、CPython和C#(还有其他语言):
所以显然,这和你教授告诉你的差不多。但正如你所知道的,这很大程度上取决于你使用的内容。
主要的区别在于Python使用的对象是动态的,而C#是强类型的。因此,IronPython在C#运行的基础上(CLR - 通用语言运行时)又增加了一个层次(DLR - 动态语言运行时),来解决这个差异。
我通常不喜欢引用维基百科的文章,但这是一个不错的起点: http://en.wikipedia.org/wiki/Dynamic_Language_Runtime
现在回到你的项目,性能可能更依赖于你的算法或启发式方法——比如你如何查询数据库——而不是语言本身。如果你熟悉某个网页框架并且觉得满意,最好还是继续使用同样的环境,而不是为了可能的几个百分点而去尝试一些你还需要摸索的东西。当然,如果应用程序是CPU密集型的,那就另当别论了。