bet*_*äsh 9 .net c# app-config winforms
在我们的.NET 4.0 Winforms应用程序中,当应用程序使用此代码保存其设置时,一些用户(所有Win7 x64)最近经历了非常长的等待时间(与其他用户相比):
Properties.Settings.Default.Save();
Run Code Online (Sandbox Code Playgroud)
应用程序设置(范围:用户,保存在AppData\Local \\下的user.config中的所有内容)包含多个自定义类以及两个表示打印机设置的类:System.Drawing.Printing.PageSettings和System.Drawing.Printing.PrinterSettings
在其中一台机器上使用GlowCode分析器,我发现以下功能需要17秒:
<Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterPrinterSettings_x003A__x003A_Write9_PrinterSettings Nodes="1" Visits="1" percent_in_Child="100.00 %" Time_in_Child="17.456" Time="17.456" Avg._Time_in_Child_="17.456" Avg._Time="17.456" Blocks_net="12" Bytes_net="1024" Blocks_gross="1087" Bytes_gross="494146" />
Run Code Online (Sandbox Code Playgroud)
其中持续时间几乎平均分为三个getter(取自GlowCode查看器):
进行一些研究后发现以下页面:https: //social.msdn.microsoft.com/Forums/vstudio/en-US/8fd2132a-63e8-498e-ab27-d95cdb45ba87/printersettings-are-very-slow 和 http:// www .pcreview.co.uk/forums/papersources-and-papersizes-really-slow-some-systems-t3660593.html,引用:
在某些系统上,特别是Vista x64系统,它需要永远(如果为x64编译,则为5到15秒,如果为x86编译,则为10-20秒),以枚举打印机对象的papersources或papersize集合.
使用一个小型测试应用程序只需保存PrinterSettings就可以在其中一台"慢速"机器上节省大约3.5秒的时间,而另一台则不会留下0.2秒的持续时间,这与我的快速开发机器相对应.
关于原因和如何改进的任何想法?
我怎样才能找到这些延误的真正原因?
编辑:感谢您指出通过驱动程序获取打印机设置,这可能解释了某些计算机上的延迟.
在将来无论何时将无法访问的计算机上更新打印机驱动程序是不可能的.
此外,我不会(我知道我知道)减少要保存的PrinterSettings信息只是因为有些人可能会遇到延迟并最终破坏向后兼容性......
也许如果我在后台尝试序列化(在用户完成一些打印机更改后?)它可能会加速...
第一个建议:
检索纸张来源和纸张尺寸的调用将传递给驱动程序。最好的选择是确保安装最新版本的驱动程序。旧版本的驱动程序(特别是包装盒中 CD 中的驱动程序)可能已经过时且存在问题。如果您还没有,请访问制造商的网站并获取最新的。
第二个建议
除此之外,这会很痛苦,但您可以尝试使用底层 Win32 API 而不是 CLR 对应项。在这种情况下,您将调用GetPrinter,请求PRINTER_INFO_2结构。获得此信息后,您可以检查 pDevMode 以获得包含您要查找的所有信息的DEVMODE结构。
不保留整个 PrinterSettings 类实例,而只保留单个设置作为其基本类型。保持简单——字符串、整数、布尔值等。显然,串行器正在请求与打印机通信,这就是引入延迟的原因。我敢打赌,如果你抓住个别班级成员并自己将它们序列化,你会看到进步。
显然,这意味着当您加载设置时,您需要将所有这些设置反序列化回新的 PrinterSettings 类中,然后应用它们。
编辑1,回应问题编辑
确实如此 - 您可以Save()
在后台异步运行。您唯一的问题是,如果用户尝试在保存完成之前结束该过程(关闭应用程序)。您必须维护一个关于是否正在发生保存的布尔值(当回调触发时设置为 false)。如果用户尝试退出应用程序并且布尔值为 true,请输入“保存设置时请稍候...”,直到布尔值变为 false。
归档时间: |
|
查看次数: |
724 次 |
最近记录: |