1

R2015b でデプロイされた mcc コンパイラを使用してアプリケーションの 1 つをコンパイルすると、奇妙な問題が発生します。3D ビューの回転 (つまり、ツールバーの [rotate3D] ボタンを使用) が非常に遅くなります。これは、R2013b でまったく同じコードをコンパイルする場合ではありませんでした。 . R2013b または R2015b 環境でアプリケーションを実行すると、回転はどちらの場合も非常に流動的/スムーズになります。

アプリケーションにある 3D に相当する、はるかに単純なコードを試しました。

function [] = TestCompiledRotationR2015b()
%[
    % Create random data
    azimuths = linspace(0, 359, 360) * pi / 180;
    elevations = linspace(0, 180, 181) * pi / 180;
    [A, E] = ndgrid(azimuths, elevations);
    Data = sin(7*(E-pi/2))./(7*(E-pi/2));
    Data(isnan(Data)) = 1;
    Data = Data .* abs(cos(0.5*A));

    ff = figure(42);
    X = cos(A) .* sin(E);
    Y = sin(A) .* sin(E);
    Z = cos(E);
    surf(X, Y, Z, abs(Data));

    % Set axes properties
    shading flat;   
    set(gca, 'DataAspectRatio', [1 1 1]);
    set(gca, 'Visible', 'off');
    xlim([-1 1]);
    ylim([-1 1]);
    zlim([-1 1]);

    uiwait(ff);
%]

また、より複雑なものも試しました (アプリケーションでよく使用する GUI レイアウト パネルとカードを使用) ....念のため、「レンダラー」の詳細をログに記録しました (コンパイル モードと非コンパイル モードでハードウェア アクセラレーションされた opengl の両方)。 ..しかし、コンパイルしたアプリケーションで遅い回転を再現できませんでした。

ここで、同じ問題を実験している方がいるかどうか疑問に思っています (R2015b でコンパイルした場合と一部のアプリケーションでのみ 3D が遅くなる) ... 何か問題があると思いますが、なぜ R2013b で動作していたのですか?なぜR2015b環境でも問題ないのですか(つまり、コンパイルされていません...コンパイルされたR2015bのみが問題を引き起こしている)、完全な謎です。

** 編集 **

コンパイル モードと非コンパイル モードの両方でマウスを約 1 分間動かしながらプロファイラーをアクティブにしようとしましたが、コンパイル モードで劇的に減少するリフレッシュ レート以外に特別なことは何もありません (コンパイル モードで 160 回の呼び出しと環境モードでの 4100 回の呼び出し)。

プロファイラー

4

1 に答える 1

1

OK、多くのテストの後、システム トレイで使用するように設計された C# アプリケーションから matlab コードを実行しているという事実に問題が関連しているように見えます。

次のすべてのテストは問題ありません。

  • 実行可能ファイルを直接作成するmcc -m TestLaunchMyApplication.m
  • csharedlib を作成し、C の基本的なメイン コードから呼び出す
  • csharedlib を作成し、基本的な c# winform アプリから呼び出す

システム トレイの C# アプリから「csharedlib」を呼び出すだけで問題が発生します。私ははるかに単純なシステム トレイ アプリケーションを設計しようとしましたが、正常に動作するので、私のせいではなく、matlab コードへの呼び出しを修正する必要があります (おそらく間違ったスレッドで、またはマウス イベントを受け取るために誤って親になっています)。

問題は終了しました。

于 2015-09-29T09:15:19.353 に答える