关于WPF程序启动性能
项目里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》
给用到XmlSerializer的库加PostEvent
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sgen.exe" /f $(TargetFileName)
去掉代码的CA验证
app.config里添加以下配置:
<runtime>
    <generatePublisherEvidence enabled="false"/>
</runtime>
- 用ngen
ngen install [AssemblyName] // 会级联生成所有依赖的Native Image 
试下来的结果是:都没用。先挖个坑在这里,等以后解决了来填吧。
关于WPF程序启动性能的更多相关文章
- Windows 程序启动性能优化(先载入EXE,后载入DLL,只取有限的代码载入内存,将CPU的IP指向程序的入口点)
		
一.重定位链接时重定位:目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码.当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整.同时,链接器需要对已经解 ...
 - wpf 程序启动显示图片
		
一.设置图片的生成操作 程序启动时会出现0.5秒的图片显示,再显示程序界面. 二.写代码实现相同效果 /// <summary> /// App.xaml 的交互逻辑 /// </s ...
 - WPF  程序启动显示为通知区域的图标方法
		
首先需要引用 System.Windows; System.Drawing; public partial class MainWindow : Window { public MainWindo ...
 - WPF 程序中启动和关闭外部.exe程序
		
当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...
 - WPF程序在Windows 7下应用Windows 8主题
		
这篇博客介绍如何在Windows 7下应用Windows 8的主题. 首先我们先看一个很常见的场景,同样的WPF程序(样式未重写)在不同的操作系统上展示会有些不同.这是为什么呢?WPF程序启动时会加载 ...
 - 提高WPF程序性能的几条建议
		
这篇博客将介绍一些提高WPF程序的建议(水平有限,如果建议有误,请指正.) 1. 加快WPF程序的启动速度: (1).减少需要显示的元素数量,去除不需要或者冗余的XAML元素代码. (2).使用UI虚 ...
 - 2019-8-31-dotnet-启动-JIT-多核心编译提升启动性能
		
title author date CreateTime categories dotnet 启动 JIT 多核心编译提升启动性能 lindexi 2019-08-31 16:55:58 +0800 ...
 - dotnet 启动 JIT 多核心编译提升启动性能
		
用2分钟提升十分之一的启动性能,通过在桌面程序启动 JIT 多核心编译提升启动性能 在 dotnet 可以通过让 JIT 进行多核心编译提升软件的启动性能,在默认托管的 ASP.NET 程序是开启的, ...
 - dotnet 使用 Crossgen2 对 DLL 进行 ReadyToRun 提升启动性能
		
我对几个应用进行严格的启动性能评估,对比了在 .NET Framework 和 dotnet 6 下的应用启动性能,非常符合预期的可以看到,在用户的设备上,经过了 NGen 之后的 .NET Fram ...
 
随机推荐
- repeater留言板[转]
			
做了一个网站,其中的在线留言板块是用Repeater来显示留言的,这样可以用少的代码还实现多的功能,但是不知道怎么分页,要是留言过多就会使页面变的很长,能过查看众多网友的经验,知道用PagedData ...
 - StringBuffer(线程安全)StringBuilder(非线程安全)
			
StringBuffer属于线程安全,相对为重量级 StringBuilder属于非线程安全,相对为轻量级 线程安全的概念: 网络编程中许多线程可能会同时运行一段代码.当每次运行结果和单独线程运行的结 ...
 - 第二,C语言示例
			
#include<stdio.h> int main (void) /*WTF*/ { int num; num=1; printf(" I am ...
 - Dreamweaver架设网站终极教程
			
转自:http://www.cnblogs.com/loveme513/archive/2006/04/03/365969.html 一.定义站点 1. 在任意一个根目录下创建好一个文件夹(我们这里假 ...
 - iOS中事件传递过程
			
iOS中,UIApplication管理着一个事件的队列,当系统获取用户的点击或滑动等事件后,就会将这些事件按顺序插入UIApplication管理的这个队里中,UIApplication再从这个队列 ...
 - WordPress 插件推荐
			
1.电商类: Woocommerce 2.幻灯片: Reslider 3.网页编写类: js_composer
 - 图片的DataURL技术
			
DataURL基本原理 在网页中我们通常用下面的方式来引用一张图片,这样当我们请求网页的时候,浏览器也会想服务器发起一个请求,去请求这张图片. <img src='images/test.jpg ...
 - 转!!Java代码规范、格式化和checkstyle检查配置文档
			
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
 - PPTP协议
			
PPTP协议 PPTP(Point-to-Point Tunneling Protocol)点对点隧道协议是PPP协议的一种扩展,它将PPP帧封装进IP包中,通过IP网络进行传输.它通过PPTP控制连 ...
 - Python_Day6_Pyhotn常用模块学习
			
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...