2010-12-16 93 views
2

我的应用程序有几个大型窗体,包含大量图像,大大增加了构建的可执行文件的大小。随着时间的推移,初创公司的表现似乎变得呆滞,似乎并没有好转。WinForms性能问题

如果我把除了主窗体以外的所有窗体都放在单独的dll中,它是否会减轻启动过程中对应用程序施加的一些压力?

我会自己测试一下,但是我有很多表格,除非有人能证实这样的行为证明是有用的,我不想这样做。

回答

1

许多因素都会影响启动性能。你有没有使用任何工具来证明它是图像?

一开始,经过这些提示: http://devcomponents.com/blog/?p=361

,并考虑使用多线程在后台加载更大的物体。

+0

感谢您的链接,非常有用!我还没有真正使用过任何工具,但我认为这只是将应用程序加载到内存中的应用程序正在陷入困境。而且我已经对我在启动时执行的所有功能进行了线程化。它有帮助,但不明显。 – Eaton 2010-12-16 03:12:30

+0

标记为答案 - 非常有帮助的链接。 – Eaton 2010-12-17 23:49:27

1

我对此不太确定,但如果我是你,我会在提高性能时使用Profiler
在我猜出有什么问题之前,我会先咨询它,然后继续工作,因为它告诉我哪些方法和类在我的代码中花费最多。

+0

我使用之前,但大部分的激烈方法调用中我使用的,而不是在我的代码的第三方的DLL。我无法获得这些信息的来源。 ) - : – Eaton 2010-12-16 03:12:09

0

我想知道你是否使用MEF和Lazy加载,然后当你真的需要模块(Form)通过调用.Value实例化。

有一对夫妇的事情,我做含有大量的表单应用程序:

  • 创建用户界面的.exe:基本上只有我的形式
  • 创建一个后端的.dll:一切做的工作在用户界面后面。

图像是否实际包含在.dll中?如果是这样,我实际上将我的图像放入与用户界面分开的.dll文件中。

鉴于图像是用于工具栏的,我不会将它们作为资源分割出来。我仍然会坚持我的建议,将其分成多个.dll文件。

+0

通过图像我真的意味着工具栏图像等。不是我放入资源的实际图像。把它们放在一个dll中,并将它们连接到启动时的相应项目上将会花费很长时间,并且可能会降低性能。通过Image属性链接它们要容易得多。 ( - : – Eaton 2010-12-16 03:16:09

+0

总而言之,我仍然认为MEF实际上可以帮助加载。 – IAbstract 2010-12-16 04:10:42

1

另一个可能有用的提示:这可以将我的应用程序的启动时间从2分钟缩短到< 10秒钟,在低端瘦客户端上。使用NGEN生成组件的预编译本机映像。

+0

有趣的..会在第三方程序集上工作吗? – Eaton 2010-12-16 03:13:57

+0

是的,这将适用于任何完全管理的程序集。模式程序集,但我从来没有尝试过。 – 2010-12-16 03:30:16

0

正如别人所说,简介,不要猜测。

不只是任何profiler会做。 Here's a user(除我之外)谁发现了他自己的random pausing。 你说“激烈”的方法都是在你没有源代码的dll中 - 这是典型的和正常的。 你需要知道的是你的代码中的哪些语句要求花费时间,并且它们不能仅限于CPU专用时间。 大多数配置文件不会告诉你这一点,但随机暂停。

如果你有兴趣,here's a recent discussion of the issues.