1

使用 R2015b 部署的 mcc 编译器编译我的一个应用程序时遇到一个奇怪的问题,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

好的,经过多次测试,这一切似乎都与我正在从设计用于系统托盘的 C# 应用程序运行 matlab 代码的事实有关:

以下所有测试都可以:

  • 直接创建可执行文件mcc -m TestLaunchMyApplication.m
  • 创建 csharedlib 并从 c 中的基本主代码调用它
  • 创建 csharedlib 并从基本的 c# winform 应用程序调用它

仅从系统托盘 c# 应用程序调用“csharedlib”会导致问题。我尝试设计更简单的系统托盘应用程序,它工作正常,所以这不是我的错,而是我的错,需要修复对 matlab 代码的调用(可能在错误的线程中或错误的父级以接收鼠标事件)。

问题已关闭。

于 2015-09-29T09:15:19.353 回答