2

最近、レポート ビューアー (Windows フォーム) で非常に奇妙な問題に遭遇しました。通常、レポート ビューアーは非常に適切に動作し、読み込みが速く、レポートが適切に表示されます。しかし、レポートを表示するのに時間がかかる特定のシナリオに遭遇しました。問題の原因が明確でないため、コード全体を投稿することはできません。

問題

次のメソッド呼び出しが問題を引き起こします (これも非常に特殊なシナリオでのみ)。

reportViewer.LocalReport.GetDefaultPageSettings()

アプリケーションがこの行を通過するまでに最大 10 分かかる場合があります。実際、この行がコメントアウトされている場合、すべてが完全に機能し始めます。

specialシナリオ_

問題を引き起こす特別なシナリオでの唯一の違いは、レポートを表示する直前に、レポートが表示される前にいくつかの Python コードが実行されることです (IronPython を介して同じ AppDomain 内で、Python コードはレポートに近いものを参照しません)。

プロファイラー、誰か?

わかりましたので、このシナリオをプロファイラー (Xte) で実行したところ、メソッドIronPython.Runtime.PythonContext.LoadAssemblyFromFileがフリーズしていることに気付きました。実行中の Python コードには明示的なアセンブリ ロードがないため、これは自動化されたアセンブリ ロードです。

奇妙な部分

それで、私が得ることができない奇妙な部分は、これら2つのものがどのように接続されているかです? 私はGetDefaultPageSettings()ILSpy で を見て、これを見ました:

public override ReportPageSettings GetDefaultPageSettings()
{
    object syncObject;
    Monitor.Enter(syncObject = this.m_syncObject);
    ReportPageSettings pageProperties;
    try
    {
        this.EnsureExecutionSession();
        pageProperties = this.m_pageProperties;
    }
    finally
    {
        Monitor.Exit(syncObject);
    }
    return pageProperties;
}

そして、このメソッドがハングする原因となっているのはロックであるとしか推測できませんが、python の実行がこのロックにどのように影響するかを理解できません。つまり、Python コードを実行しなければ、このメソッドが遅延なく完全に正常に実行されることは明らかです。

ちなみに - 約後。10分物はレポートを示します。10分間ロックアップした後、通常どおり続行します。

ここからどこへ行くべきかについての提案はありますか?

ですから、私が今行くべき場所について誰かが私に何か情報を提供してくれれば、本当に感謝しています. 現時点では、このケースを別のクリーンなプロジェクトに分離しようとしています。成功したらすぐにここに投稿します。

ありがとう!

更新 1: Python スクリプトの例

これまでのところ、追加情報は 1 つしか得られませんでした。この問題は、最小限のスクリプトを実行した場合でも発生します。そのため、スクリプト0(0 を返すだけ) を実行しても問題が発生します。

更新 2: 別のドメインでの実行

別のドメインで python を実行しても役に立ちませんでした。問題はまだ存在します。

更新 3: CurrentUICulture が関与しています。

デバッグ セッション中のある時点で、問題のあるシナリオで AppDomain が次のリソース アセンブリを解決しようとして失敗することに気付きました。

mscorlib.resources, Version=4.0.0.0, Culture=fi, PublicKeyToken=b77a5c561934e089
mscorlib.resources, Version=4.0.0.0, Culture=fi-FI, PublicKeyToken=b77a5c561934e089

これが 10 分間の遅延の理由です。そのアセンブリを何度も何度もロードしようとします (CurrentCultureとの両方CurrentUICultureが に設定されていfi-FIます)。ただし、をに変更するCurrentUICultureen-US、問題はなくなります (そのアセンブリが不要になるため)。

しかし、やはり - 謎はまだ残っています - にCurrentUICulture設定されてfi-FIいて、IronPython を介してスクリプトを実行すると、必死にこのリソース ファイルをロードしようとし、常に失敗します。誰かが私にこれを説明できるなら - してください:)

4

1 に答える 1

0

のテキストには、Update 3実際に解像度が含まれています。現時点で私が知っている唯一の解決策は、レポート コントロールがロードおよびレンダリングされている瞬間にを変更するCurrentUICultureことです。en-USこれにより、10 分間の遅延が効果的に解消されます。

于 2012-08-24T06:09:47.913 に答える