VB.NETで書かれたクライアント用のプロジェクトがあります。プロジェクトの1つでは、約100個のモジュールがあり、すべて非常に簡単です。それらはオブジェクト型間で変換する拡張メソッドです。ここに小さなスニペットがあります:VB.NET SLOWコンパイル時間 - ディスクまたはCPUアクティビティなし
Public Module ScheduleExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function ToServicesData(ByVal source As Schedule) As ScheduleServicesData
If (source IsNot Nothing) Then
Dim target As New ScheduleServicesData
With target
.CenterId = source.CenterId
.EmployeeGuid = source.EmployeeGuid
.EndDateTime = source.EndDateTime
問題は、このプロジェクトだけでは2分以上かかることです。私はdiskmonとfilemonを実行し、ビルドがハングアップしている間はファイルシステムにアクセスしません。大半の実行中にCPU使用率も低くなります。約2分後にビルドが終了し、ディスクとCPUの処理が行われます。問題はどのマシンでも再現できます(これまでに試したのは4つです)。
私は今までvbcコマンドラインを使ってプロジェクトをコンパイルしていましたが、そこにも問題があります。
コンパイル時間の悪いVB.NET拡張メソッドについて何かありますか?それはループ/取得/設定などよりも複雑な私たちが使用している唯一の機能です。