可以基于.NET的应用程序以这种方式执行吗?

时间:2009-07-28 18:25:21

标签: c# .net performance

我们有一个“打印引擎”,它基本上选择了针对文件运行的预定义任务,这些“任务”是.NET 2.0 - 3.5(在C#中)命令行应用程序。

它所做的就是一个接一个地运行,并且我们没有在内部开发的应用程序,它们运行得非常快,通常为10-30毫秒。

但是,我们的.NET应用程序通常需要1-3秒,当您处理每个文件和几个文件的多个可执行文件时,所有文件都是同步执行的,我们最终会有很长的等待时间。

通常,这些应用程序正在进行一些数据库工作和一些非常基本的文件修改(纯文本内容)。我们甚至已经删除了一些应用程序,以便查看是否只是.NET Framework的开销减慢了所有内容,并且每个调查过它的人都刚刚得出结论

  

“。NET只是很慢而且没有   以这种方式表演。“

我想知道这是否属实,以及我可以使用哪些技术来追踪问题或缓解滞后。我尝试过使用分析器,但到目前为止我还没有看到过会重复执行命令行.NET应用程序,这就是我们的工作。大多数人只想运行一次可执行文件并附加到它来对其进行分析。

理想情况下,我们希望完全选择不使用打印引擎并开发自己更高效的引擎,但这不会发生。

5 个答案:

答案 0 :(得分:7)

  

通常这些应用程序正在进行一些数据库工作

你去吧。打包的本机应用程序可能不与数据库通信。即使是一个简短的查询,仅此一项就可以轻松地花费10-30毫秒+。

此外,.NET确实需要一些额外的开销来建立应用程序域。如果您可以将一些小型应用程序分组为较少的较小应用程序,或者使用命令行参数将它们配置为一次运行多个任务,您可能会发现事情会更好。

答案 1 :(得分:3)

大多数(全部?).NET减速与程序集加载和JIT编译有关。

如果您可以将多个任务组合到命令行中,那么它将使其运行得更快。请记住,对于您每次动态加载和编译每个程序集及其所有资源的单个任务,一遍又一遍地执行命令行应用程序。

此外,如果您使用NGEN制作装配/装配体的预编译图像,这将显着缩短启动时间。

答案 2 :(得分:3)

本质上,它并不慢,但任何操作都只有最慢的步骤。启动某些东西有对象初始化等,但速度并不慢。那么,空程序的性能数字是多少?如果这需要几秒钟,我真的很想知道发生了什么。

答案 3 :(得分:1)

难以像“.net应用程序缓慢”这样的一揽子陈述。您可能有一些JIT问题,但预编译它们可以摆脱它。看看这些应用正在做什么。如果他们正在与数据库交谈,那么期待一两秒钟来建立连接,执行查询,与它做一些事情,退出。

当您在数据库连接和查询延迟之外进行真正微调应用程序时,本机编译的应用程序将比.net应用程序或Java应用程序或脚本运行得更快...这假设是本地编译的应用程序有效编码&优化

答案 4 :(得分:1)

我会改变你从打印引擎调用这些任务的方式。听起来你是从命令行/创建过程运行它们?如果是这种情况,您可以在打印引擎启动时将它们加载到您的应用程序域中,然后使用相关参数调用其Main方法。这将大大减少JIT和加载时间。