在使用.NET的XmlSerializer时,.NET会在运行时编译出一个或多个专门用来解析序列化类型的临时程序集DLL. 编译和加载这个临时的程序集是非常耗时的一件事. 而且有时在Production环境下,没有编译器(csc.exe),还会发生错误.
“c6pyy1to”就是.NET动态编译出的程序集.
用Stopwatch测试,这一块用时2秒左右.
为了解决这一问题,在.NET SDK中MS提供了一个工具sgen.exe, 用sgen我们可以在运行之前”预编译”这个动态生成的dll.
下面是sgen的说明和基本的用法:
Setting environment to use Microsoft .NET Framework v2.0 SDK tools.
For a list of SDK tools, see the 'StartTools.htm' file in the bin folder.
D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0>sgen
Microsoft (R) Xml Serialization support utility
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.
Missing required command-line argument: The name of the source assembly.
Generates serialization assemblies for use with XmlSerializer.
The utility allows developers to pre-generate assemblies for serialization
and deploying the assemblies with the application.
Usage: sgen.exe [[/assembly:<assembly name>] | [<assembly file location>]]
[/type:] [/reference:] [/compiler:] [/debug] [/keep] [/nologo]
[/silent] [/verbose]
我们可以利用VS的post-build event将这个命令在VS编译后自动运行, 做法如下:
再次编译项目,sgen已经自动运行了.
为了检验sgen的效果,我们可以再次运行图二中的代码,这次这块代码只用了20多毫秒.