我无法理解为什么会这样做,但是因为几天的帮助需要花费很多时间来展示。内联(选择功能,选择“帮助”),或使用命令doc
或help
。命令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,但如果我能避免这样那就太棒了。
答案 0 :(得分:4)
有一些事情可能会导致这个问题,但鉴于您提供的信息,很难准确说明发生了什么。
当R2012b帮助系统初始化时,它会执行一些有时会引入明显延迟的任务,主要与确定哪些MathWorks产品可用以及如何设置帮助首选项有关。 10秒钟是不寻常的,但这可能是导致延迟的原因。如果您在第一次使用帮助系统时看到性能受到影响,但在同一个MATLAB会话中没有再次出现,这可能是原因。在R2013a中,此行为得到了改进。
除了初始化任务之外,有问题的Java调用是针对用于搜索文档的相同搜索索引的相对简单的搜索。如果您发现在帮助浏览器中搜索文档的速度很慢,那么这将暗示性能问题存在于帮助系统的搜索功能中。
在任何一种情况下,最好的选择可能是contact MathWorks technical support。我们可能会仔细研究这个问题,并可能提出某种解决方法。
答案 1 :(得分: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再次快速。