赵灿云南大学,记录在解决matlab问题上与赵灿的一次pk

赵灿,何许人也?ADCC首席软件架构师,也就是之前所说的硕士毕业论文严重抄袭的人。
已经有很长时间工作上与之没有交集了,最近竟然有机会在编程的问题上与之直接pk。编程本不是鄙人的强项,但在这次pk中我以完胜收场。
这其实已经是清明假期之前的事情了,就是我之前的日志中提到的手动初始化MCR的问题,这个问题是我的一个同事提出来的,之前我的精力主要花费在如何成功在java程序中用jar包的形式调用matlab的问题,刚开始将问题的重心转移到MCR的手动初始化上来。
同事按捺不住,直接绕过我去请教赵灿,具体解决过程我不得而知了,但根据同事后来对我陈述的解决方案来看,赵灿解决的思路如下。首先,将使用MCR最基本的jar包javabuilder.jar反编译,之后查阅MCR初始化类ComponentsMCRFactory.java相关的源代码,如下:
public static MWMCR newInstance(MWComponentOptions mwcomponentoptions)
throws MWException
{
if (null == mwcomponentoptions.getCtfSource())
{
mwcomponentoptions = new MWComponentOptions(mwcomponentoptions);
mwcomponentoptions.setCtfSource(sDefaultComponentOptions.getCtfSource());
}
-------------------------------------------------------------------------------------------------------
return MWMCR.newInstance(mwcomponentoptions, com/mathworks/toolbox/javabuilder/webfigures/components/ComponentsMCRFactory, "components", "components_70EA6E0845E8C063CBA67A5BAC1C0599", new int[] {
7, 14, 0
});
--------------------------------------------------------------------------------------------------------
}
public static MWMCR newInstance()
throws MWException
{
return newInstance(sDefaultComponentOptions);
}
static
{
sDefaultComponentOptions = new MWComponentOptions(new Object[] {
MWCtfExtractLocation.EXTRACT_TO_CACHE, new MWCtfClassLoaderSource(com/mathworks/toolbox/javabuilder/webfigures/components/ComponentsMCRFactory)
});
}
具体的方案我已经忘记,赵灿提供的思路大致如下,将下划线包围部分的初始化代码依葫芦画瓢应用在matlab类的初始化过程中,赵灿和同事验证后,原先3秒的初始化过程会降低到2秒,同事给我讲解时也说不清具体的原理,但仅从代码的执行过程中来看,有一部分判断过程被略过了。
但这种方法存在一个很明显的缺陷,MCR一般的执行过程应当是这样的,首先初始化一个MCR实例,一般是在第一个matlab类初始化之前自动执行,然后之后的matlab类初始化都使用这个MCR实例。但采用赵灿的方案之后,每个matlab类的初始化过程都需要初始化一个MCR实例,这不仅仅是一种浪费,而且除第一个matlab类之外,所有的matlab类的初始化所需要的时间都被延长了。
其实问题的核心在于,手动初始化一个MCR实例后,matlab类的初始化无法指定在这个MCR实例上进行,我查阅了matlab编译前所生成的类源文件,发现有一个构造函数可以指定MCR,但这个构造函数是私有的,将这个构造函数公有化,手动打jar包,并且配置CTF文件后,问题解决。除了手动MCR初始化的过程之外,单个matlab类的初始化时间降低为0.4秒左右。
有两个意外收获:
1、没有急于解决这个MCR初始化问题,也没有想到同事会绕过我去请教赵灿,问题的解决也是我提出思路,同事完成的;
2、没有想到会在这个问题上变成一种pk的局面,也没有想到竟然这么轻易地就完胜对手。
Tags:  matlab教程 matlab下载 matlab 传奇pk记录 赵灿云南大学

延伸阅读

最新评论

发表评论