Menu

Version 1.10 - fivefold speed boost, passing DLLs

* Runtime has again been reduced by a factor of about 5. This was necessary for our application, which yields about 2 million dependencies from its .IL files. The speedup is achieved by using special checkers for rules following certain patterns. For example, a rule My.Name.Space.MyClass ---> ** need not evaluate the right hand side of a dependency at all; and for the left hand side, a simple StartsWith is sufficient, instead of a full regular expression check. There are now about 9 heuristics for faster comparisons of common "rule patterns". For our project, this reduces the runtime from around 50 minutes to about 10 minutes. (Another speedup betwwen 2 and 3 can be expected with a migration to ANTLR 3; however, ANTLR 3 no longer supports the ! operator in lexer grammars, which makes migration harder than expected).
* DLL and EXE files can directly be passed to ILDASMDC. Internally, ILDASMDC will look for the registry keys HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\sdkInstallRootv2.0 and HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\sdkInstallRootv3.0, append \bin to it and try to run ILDASM.EXE from the resulting directories with options /NOBAR /UTF8 /QUOTE /LINE /OUT=.... With this feature, use of ildasm.bat is discouraged.
* The /r flag will now run dependency checking on an input file (IL, DLL, or EXE) only if it has changed since the last checker run. The information is stored as an empty file called ILDASMDCTouch#.tmp, where # is a hash code of the file's name. Currently, these "touch files" are never deleted and produce garbage in the temp folder.
* ILDASM is buggy in that it sometimes fills arbitrary binary garbage characters into the filename behind .line directives. Because of this, ILDASMDC now accepts almost everything inside names, i.e. between quotes.
* ILDASM is buggy in that it writes 16-bit unicode characters even if passed the /UTF8 option. Therefore, ILDASMDC now tries to read a file first with Encoding.UTF8, but then also with Encoding.Unicode if the former fails.

Posted by Harald M. Mueller 2007-11-24

Log in to post a comment.