Properties.Settings.Default.Save();
- 典型持续时间:0.5至1秒
- 极端持续时间:15至20秒
应用程序设置(范围:用户,所有内容保存在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" />
其中持续时间几乎平均分配给三个获取器(从GlowCode查看器中获取):
- PrinterSettings::get_PaperSizes
- PrinterSettings::get_PaperSources
- PrinterSettings::get_PrinterResolutions
进行一些研究后,发现以下页面: 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,则枚举printersettings对象的papersources或papersizes集合需要很长时间(5至15秒),如果编译为x86,则需要10-20秒。使用一个小测试应用程序只保存PrinterSettings,在其中一个“慢”的机器上显示了约3.5秒的保存时间,而在另一个机器上则显示了0.2秒的持续时间,这对应于我的快速开发机器。有什么关于原因和如何改进的想法吗?如何找到这些延迟的真正原因?编辑:感谢指出打印机设置是通过驱动程序获取的,这可能解释了某些机器上的延迟。在未来无法访问的机器上更新打印机驱动程序是不可能的。此外,我不会(我知道我知道)仅因为某些人可能会遇到滞后并最终破坏向后兼容性而减少要保存的PrinterSettings信息...也许如果我在后台尝试序列化(在用户进行了一些打印机更改后?)它可能会加速事情...