この2日間は私が変です。リリースビルドが実際にを実行し、デバッグバージョンよりも遅いが実行されることがわかりました。.Netリリースビルドの動作がデバッグよりも遅い
1.私はようやく私のWindowsでの私のエントリポイント(メイン)からすべてのものを剥奪問題
はこれだけを残して、exeファイルをフォーム:
[STAThread]
static void Main(params string[] args)
{
Stopwatch sw = Stopwatch.StartNew();
System.Xml.Serialization.XmlSerializer xmlS =
new System.Xml.Serialization.XmlSerializer(typeof(TestClass));
sw.Stop();
MessageBox.Show(sw.Elapsed.ToString());
}
だから私は実際にいずれかをインスタンス化するわけではありませんフォームはもう、テストだけです。 TestClass
は、わずか3つの公開int
プロパティを持つ小さなクラスです。私のメインの.exe(Windowsフォーム)は〜1Mbの大きさです。
2.デバッグモードで結果
をリリースして、それは〜1.2秒を要している間、私の経過時間は、〜200msのです。
3.追加情報
私はそのような場合には、それは速い(上記と全く同じコード)を動作するため、スタートアッププロジェクトとしてその溶液中の他のいくつかのプロジェクトを設定しようとすると、奇妙なことがあります。
4.可能な限り迅速にこのバグを修正するためにクイックハック
、私は私の最初のエントリのプロジェクトを参照することにより、メインアプリケーションフォームをインスタンス化し、実行し、私の溶液中での新しい.exeのスタートアッププロジェクトを作成しました。その場合、それは再び高速で動作します、私のエントリのexeは今は静的なMainメソッドだけを含む大きな24kbです。
誰も以前に似たような動作をしましたか?上記のコードを見て、どこか別の場所で私が遭遇した場合は、別のスレッドでたくさんの作業を行う静的なイニシャライザがあると推測します(ただし、ここではそうではありません。 )、さらにはリリースビルドでのみ実行していますか?
[編集]詳細情報:私はXmlSerializerが実行時にILコードを生成することを知っていますが、実際の質問は他の場合よりも遅く動作する理由です。実際のシリアライゼーションのみをベンチマークすると、リリースでは3倍遅くなります(ただし、最初のプロジェクトから実行した場合のみ)。これまでに奇妙な部分の
[更新]今:修正/再構築の手順のカップルの後、私の新しいエントリー・プロジェクトは、最初の1つのとして動作するように始めた - 起動が遅く、遅いロード。私はプロジェクト名とGUIDを変更し、それを再構築し、それは再び速く働いています。
XmlSerializerが実際のシリアル化を処理するために、実行時にクラスを生成することを考慮してください。 C#コードを生成し、実行時にコンパイルします。 –
私はそれを理解していますが、私はいつも私のリリースexeアプリケーションでは遅いと理解していません。さらに、XmlSerializerをインスタンス化し、例えば10秒間スリープしてから、実際のシリアライゼーション1000タイマーをベンチマークすることができます。リリースでは常に遅くなります。 – Groo