提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|行业资讯|编辑:龚雪|2023-02-06 10:38:47.297|阅读 132 次
概述:在本文中,将为大家记录9个提升WPF应用程序冷启动性能的策略。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
本文记录9个提升WPF应用程序冷启动性能的策略,面列出的3个技术适用于所有WPF应用程序,无论使用什么组件:
以下技术是针对DevExpress WPF界面控件的:
最后一种技术涉及使用Visual Studio的Performance Profiler(帮助确定与性能相关问题的潜在原因)。
PS:有用控件推荐~DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。
DevExpress技术交流群7:674691612 欢迎一起进群讨论
(原生图像生成器)是优化 .NET框架应用程序((.NET/. NET Core项目不支持Ngen)应该考虑的第一个工具,.NET框架项目使用Microsoft中间语言(MSIL)代码生成程序集。在执行应用程序之前,需要将此代码转换为机器代码,从MSIL到机器代码的转换在启动时就开始了——这个过程可能需要大量的时间。
开发人员可以使用Ngen.exe生成已经包含本机代码的原生映像库,需要注意的是,Ngen.exe应该在将要使用应用程序的机器上使用。开发人员可以在自己的机器上运行它来测试性能,但为了优化终端用户的冷启动,需要在用户机器上使用Ngen.exe。
在用户的机器上运行Ngen的最佳方法是将Ngen.exe合并到应用程序安装程序中。在安装过程中,开发人员需要执行以下命令行,Ngen.exe将自动处理与项目相关的所有程序集:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe install C:\MyApp.exe
如果开发者将应用程序作为单击一次或存档(并且没有安装程序)分发,则可以在应用程序启动期间从代码中调用Ngen.exe。要在第一次启动时只运行Ngen.exe,为可执行文件计算一个哈希值,并在后续启动时检查这个哈希值:
var savedHash = string.Empty; var assemblyLocation = Assembly.GetEntryAssembly().Location; // Specify a path to the file that stores your executable’s hash. // Create this file or load the saved hash if the file already exists: var hashPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "hash.txt"); if (!File.Exists(hashPath)) { File.Create(hashPath); } else { savedHash = File.ReadAllText(hashPath); } // Obtain the hash for your executable. // Cancel the operation if the application does not have changes: var hash = string.Concat(SHA1.Create().ComputeHash(File.ReadAllBytes(assemblyLocation)) .Select(x => x.ToString("x2"))); if (hash.Equals(savedHash)) return; // Obtain the path to ngen.exe: var dotNetRuntimePath = RuntimeEnvironment.GetRuntimeDirectory(); var ngenPath = Path.Combine(dotNetRuntimePath, "ngen.exe"); // Create a process that runs ngen.exe: var process = new Process { StartInfo = new ProcessStartInfo { FileName = ngenPath, // Pass the path to your executable: Arguments = $"install \"{assemblyLocation}\" /nologo", CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, // Run the process as administrator: UseShellExecute = true, Verb = "runas" } }; // Run the process and save the executable’s hash: try { process.Start(); process.WaitForExit(); File.WriteAllText(hashPath, hash); } catch { // Failed to start. // For example, a user cancelled the UAC prompt. }
Windows 8(以及更新版本的Windows操作系统)包含一个本机映像任务,当计算机空闲时,它会自动为经常使用的.NET Framework 4.5+应用程序生成本机映像。尽管如此,开发者仍然需要手动运行Ngen.exe,因为本机图像任务仅适用于位于GAC或Windows Store应用程序包中的程序集。
下面的图片说明了可以从Ngen.exe启动的好处:
或者,开发者可以优化Microsoft中间语言(MSIL)到机器代码的转换,方法是在应用程序启动时异步转换最常用的方法,为此可以使用MultiCore JIT(可用于.NET 和 .NET Framework 4.5+应用程序)。MultiCore JIT记录应用程序使用的方法,并将它们保存到磁盘,当应用程序第二次执行时,保存的方法将在单独的进程中编译为本机代码。
开发者只需要在应用构造函数中使用以下两行代码来启用MultiCore JIT:
public App() { // Defines where to store JIT profiles ProfileOptimization.SetProfileRoot(@"C:\MyAppFolder"); // Enables Multicore JIT with the specified profile ProfileOptimization.StartProfile("Startup.Profile"); }
MultiCore JIT在启动优化方面不如Ngen.exe有效,但另一方面它同时支持.NET Framework和.NET/. NET Core项目。开发者可以将MultiCore JIT与ReadyToRun选项结合使用(稍后将介绍),并从这两种优化策略中受益。
ReadyToRun (R2R)是一种提前编译(AOT)的形式,用R2R发布的应用程序同时包含MSIL和本机代码段,这在一定程度上消除了即时编译的需要。
R2R选项仅在.NET/. NET Core项目中可用,要启用R2R,请修改“. csproj” / “. vbproj”文件和新增PublishReadyToRun标签:
<PropertyGroup> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup>
要执行此策略,请发布您的项目:
1. 右键单击项目并选择Publish:
2. 在随后的对话框中,选择发布的应用程序将驻留的目标文件夹。
3. 打开发布设置,选择目标运行时,单击Publish按钮:
4. 打开目标文件夹并运行“.exe”文件。
如前所述,R2R可以在.NET/. NET Core应用程序中与MultiCore JIT一起使用,下图说明了可以从R2R和MultiCore JIT中获得的启动好处。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都网通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
行业领先的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WPF Subscription高效MVVM开发模式,WPF界面解决方案首选工具,帮助企业实现酷炫动效界面。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢