项目里WPF的启动时间太久(>1分钟),显然是不能接受的。超过10秒,连Loading的等待框都会让用户感到厌烦。

1. 症状

项目的结构是1个WPF主进程,启动3个WPF子进程。子进程在启动时会卡顿3-10秒不等,能在进程管理器里看这个进程,但只有1个线程、没有CPU波动、35个Handle创建、244K内存。然后就停住不动了,甚至我在Main()的头一句打的Log都没Print出来。

一开机启动会卡,连续启动10+次也会卡,说明不是Cold Start类的问题,否则只有第一次启动会卡。

反复启动10+次,偶尔不卡,多数会卡顿。似乎也不是标准的Warm Start类的问题。

2. 若干尝试:

主要参考这篇《Improving WPF applications startup time》

  1. 给用到XmlSerializer的库加PostEvent

    "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sgen.exe" /f $(TargetFileName)

  2. 去掉代码的CA验证

    app.config里添加以下配置:

<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
  1. 用ngen

    ngen install [AssemblyName] // 会级联生成所有依赖的Native Image

试下来的结果是:都没用。先挖个坑在这里,等以后解决了来填吧。

关于WPF程序启动性能的更多相关文章

  1. Windows 程序启动性能优化(先载入EXE,后载入DLL,只取有限的代码载入内存,将CPU的IP指向程序的入口点)

    一.重定位链接时重定位:目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码.当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整.同时,链接器需要对已经解 ...

  2. wpf 程序启动显示图片

    一.设置图片的生成操作 程序启动时会出现0.5秒的图片显示,再显示程序界面. 二.写代码实现相同效果 /// <summary> /// App.xaml 的交互逻辑 /// </s ...

  3. WPF 程序启动显示为通知区域的图标方法

    首先需要引用  System.Windows;  System.Drawing; public partial class MainWindow : Window { public MainWindo ...

  4. WPF 程序中启动和关闭外部.exe程序

    当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...

  5. WPF程序在Windows 7下应用Windows 8主题

    这篇博客介绍如何在Windows 7下应用Windows 8的主题. 首先我们先看一个很常见的场景,同样的WPF程序(样式未重写)在不同的操作系统上展示会有些不同.这是为什么呢?WPF程序启动时会加载 ...

  6. 提高WPF程序性能的几条建议

    这篇博客将介绍一些提高WPF程序的建议(水平有限,如果建议有误,请指正.) 1. 加快WPF程序的启动速度: (1).减少需要显示的元素数量,去除不需要或者冗余的XAML元素代码. (2).使用UI虚 ...

  7. 2019-8-31-dotnet-启动-JIT-多核心编译提升启动性能

    title author date CreateTime categories dotnet 启动 JIT 多核心编译提升启动性能 lindexi 2019-08-31 16:55:58 +0800 ...

  8. dotnet 启动 JIT 多核心编译提升启动性能

    用2分钟提升十分之一的启动性能,通过在桌面程序启动 JIT 多核心编译提升启动性能 在 dotnet 可以通过让 JIT 进行多核心编译提升软件的启动性能,在默认托管的 ASP.NET 程序是开启的, ...

  9. dotnet 使用 Crossgen2 对 DLL 进行 ReadyToRun 提升启动性能

    我对几个应用进行严格的启动性能评估,对比了在 .NET Framework 和 dotnet 6 下的应用启动性能,非常符合预期的可以看到,在用户的设备上,经过了 NGen 之后的 .NET Fram ...

随机推荐

  1. Android Button上的文字自动变成大写,如何解决呢?

    android:textAllCaps="false"手动添加这一行,就不会有烦恼了.

  2. Java Web应用包括些啥?

    Tomcat服务器最重要的作用就是充当Java Web应用的容器.Java Servlet规范中对Java Web应用的定义如下: Java Web应用由一组Servlet.HTML页面.类以及其他可 ...

  3. OpenCV从入门到放弃系列之——图像的基本操作

    读取.修改.保存图像 图像读取函数imread(); 图像颜色空间的转换cvtColor(); 图像保存至硬盘imwrite(); /********************************* ...

  4. Openstack+Kubernetes+Docker微服务实践之路--弹性扩容

    服务上线就要顶的住压力.扛的住考验,不然挨说的还是我们这帮做事的兄弟,还记得上图这个场景吗 老办法是服务集群部署,但总归有个上限,之前跟阿里合作的时候他们有个弹性计算可以通过设置CPU的阀值来动态扩展 ...

  5. Signatures of Mutational Processes in Human Cancer

    http://cancer.sanger.ac.uk/cosmic/signatures#

  6. Web墨卡托投影(转)

    Google Maps地图投影全解析(1):Web墨卡托投影 Google Maps.Virtual Earth等网络地理所使用的地图投影,常被称作Web Mercator或Spherical Mer ...

  7. Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)

    一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; 提示错误信息: nginx: [emerg] the same path name " ...

  8. eclipse导入android项目红叉和红色感叹号怎么解决

    解决办法如下:第一步:你要确保这个项目没有问题,有的项目本身就有问题,例如:xml文件,java程序等本身就有错.第二步:在Eclipse菜单中选择“Project”----〉Clean 解决不了,下 ...

  9. 转:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数

    转:http://toutiao.com/a4280977370/ [解法一] 可以举一个八位的二进制例子来进行分析.对于二进制操作,我们知道,除以一个 2,原来的数字将会减少一个0.如果除的过程中有 ...

  10. (转载)SQL— CONCAT(字符串连接函数)

    有的时候,我们有需要将由不同栏位获得的资料串连在一起.每一种资料库都有提供方法来达到这个目的: MySQL: CONCAT() Oracle: CONCAT(), || SQL Server: + C ...