5

我无法解释为什么会这样做,但是由于几天后的帮助需要很多时间才能显示出来。内联(选择函数,选择“帮助”),或使用命令dochelp. 该命令doc cmdname大约需要 10 秒才能显示帮助窗口。举个例子,我fwrite尝试profile on;doc fwrite;profile viewer挖掘兔子洞,我找到了一个私有的 java matlab 方法,该方法永远需要:

tic;
com.mathworks.mlwidgets.help.HelpUtils.getDocCommandArg('matlab\fwrite', true);
toc 

Elapsed time is 9.993832 seconds.

知道是什么导致了这个问题吗?它也发生在安全模式下,除了 MATLAB 没有其他正在运行的程序。我会尝试完全重新安装 MATLAB,但如果我能避免这种情况那就太好了。

4

2 回答 2

4

有几件事可能会导致此问题,但鉴于您提供的信息,很难确切地说出发生了什么。

当 R2012b 帮助系统初始化时,它会执行一些有时会引入明显延迟的任务,主要与确定哪些 MathWorks 产品可用以及如何设置帮助首选项有关。10 秒是不寻常的,但这有可能是导致延迟的原因。如果您在第一次使用帮助系统时看到性能下降,但在同一个 MATLAB 会话中没有再次出现,这可能是原因。此行为在 R2013a 中得到改进。

除了初始化任务之外,所讨论的 Java 调用是针对用于搜索文档的相同搜索索引的相对简单的搜索。如果您发现在帮助浏览器中搜索文档的速度很慢,这表明性能问题存在于帮助系统的搜索功能中。

无论哪种情况,您最好的选择可能是联系 MathWorks 技术支持。我们很可能可以仔细研究一下,并可能想出某种修复方法。

于 2013-03-15T18:24:00.167 回答
1

该问题已通过 mathworks 支持的输入解决:

>> tic;doc fwrite;toc
Elapsed time is 20.301202 seconds.

>> tic;reader = org.apache.lucene.index.IndexReader.open(fullfile(docroot,'helpsearch'));
searcher = org.apache.lucene.search.IndexSearcher(reader);
term = org.apache.lucene.index.Term('relpath','ref/plot.html');
query = org.apache.lucene.search.TermQuery(term);
hits = searcher.search(query);
fprintf('Found %d results\n', hits.length); searcher.close; reader.close; toc;
Java exception occurred:
java.io.IOException: Lock obtain timed out:
Lock@C:\Users\b\AppData\Local\Temp\lucene-ca3070c312bc20732565936b371a8bd3-     commit.lock
at
org.apache.lucene.store.Lock.obtain(Lock.java:56)
at
org.apache.lucene.store.Lock$With.run(Lock.java:98)
at
org.apache.lucene.index.IndexReader.open(IndexReader.java:141)
at
org.apache.lucene.index.IndexReader.open(IndexReader.java:125)

之后,我认为这是临时文件被锁定的问题,我关闭了 Matlab,进入 AppData\Local\Temp\ 并清理了其中的所有临时文件。

>> tic;
reader = org.apache.lucene.index.IndexReader.open(fullfile(docroot,'helpsearch'));
searcher = org.apache.lucene.search.IndexSearcher(reader);
term = org.apache.lucene.index.Term('relpath','ref/plot.html');
query = org.apache.lucene.search.TermQuery(term);
hits = searcher.search(query);
fprintf('Found %d results\n', hits.length); searcher.close; reader.close; toc;
Found 5 results
Elapsed time is 0.106868 seconds.

>> tic;doc fwrite;toc
Elapsed time is 0.153808 seconds.

要么是清理临时文件,要么是对内部 java 类 org.apache.lucene* 的引用起到了作用,但就是这样,现在 doc 又快了。

于 2013-04-02T09:42:13.440 回答