首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2016年ColdFusion表现与ColdFusion 9相比

2016年ColdFusion表现与ColdFusion 9相比
EN

Stack Overflow用户
提问于 2018-04-11 09:18:51
回答 1查看 789关注 0票数 11

我们正处于从ColdFusion 9升级到2016年ColdFusion的过程中,我们注意到整体性能下降了。我们进行了几次模拟,以提供更多的洞察力。下面是一个脚本,给出了性能下降的一个很好的例子。脚本构建一个查询,然后根据查询创建一个结构。

代码语言:javascript
复制
<!--- Machine info --->
<cfset runtime = createObject("java", "java.lang.System")>
<cfset props = runtime.getProperties()> 
<cfset env = runtime.getenv()> 

<Cfoutput>

coldfusion: #SERVER.ColdFusion.ProductVersion# #SERVER.ColdFusion.ProductLevel#<br>

java.version: #props["java.version"]#<br>
java.vm.name: #props["java.vm.name"]#<br>
os.name: #props["os.name"]#<br>

PROCESSOR_IDENTIFIER: #env["PROCESSOR_IDENTIFIER"]#<br>
PROCESSOR_ARCHITECTURE: #env["PROCESSOR_ARCHITECTURE"]#<br>
NUMBER_OF_PROCESSORS: #env["NUMBER_OF_PROCESSORS"]#<br><Br>
</Cfoutput>

<!--- Create a query --->
<cfset myQuery = QueryNew("Name, Time, Advanced", "VarChar, Time, Bit")> 
<cfset testQuery = QueryNew("ColumnA,ColumnB,ColumnC,ColumnD,ColumnE,ColumnF,ColumnG,ColumnH,ColumnI,ColumnJ,ColumnK,ColumnL,ColumnM,ColumnN","VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar")>

<!--- Populate the query --->
<Cfloop from=1 to=300 index="x">
    <cfset QueryAddRow(testQuery, 1)> 
    <cfloop index="intLetter" from="#Asc('A')#" to="#Asc('N')#" step="1">
        <cfset temp = QuerySetCell(testQuery, "Column#chr(intLetter)#", "Row #x# column #intLetter#", x)> 
    </cfloop>
</cfloop>

<Cfset init = GetTickCount()>
<!--- Query to structure --->
<Cfset queryToStruct = structNEw()>
<cfloop query="testQuery">
<Cfset init2 = GetTickCount()>
    <cfset queryToStruct[testQuery.currentrow] = structNew()>
    <cfset queryToStruct[testQuery.currentrow]['ColumnA'] = structNew()>
    <cfloop list="#testQuery.columnList#" index="key">
        <cfset queryToStruct[testQuery.currentrow]['ColumnA'][testQuery[key][testQuery.currentrow]] = testQuery[key][testQuery.currentrow]>
    </cfloop>
    <cfoutput>#x#:#GetTickCount()-init2#<br></cfoutput>
</cfloop>

<cfoutput>-----------<br><b>#GetTickCount()-init#</b><br><br><Br></cfoutput>

<!---Cfdump var=#queryToStruct# --->

我们有两台服务器,硬件配置完全相同。一台服务器运行在Windows2008/ ColdFusion server 9 Enterprise (Java 1.6.0_14)上,另一台运行在Windows2016/ ColdFusion 2016标准(JavaVersion1.8.0_112)上。两个ColdFusion服务器都具有相同的最小JVM大小(5024 MB)和最大JVM大小(5048 MB)。

ColdFusion 9服务器的性能提高了4倍以上。有人能解释一下为什么会发生这种情况,以及如何解决这个问题吗?

更新

为了排除任何其他会减慢ColdFusion速度的进程,我在同一台虚拟机上安装了ColdFusion 9、ColdFusion 11和ColdFusion 2016,它们都使用内置的web服务器。默认安装设置。结果是: ColdFusion 9最快,紧随其后的是ColdFusion 11,ColdFusion 2016则慢得多。

更新2对脚本进行了一些更改,因此更清楚的是该脚本正在做什么。

更新3结果可以在这里查看:http://136.144.177.152/test2.asphttp://136.144.177.152/test-toma.asphttp://136.144.177.152/test-ag.asp注意到代码实际上已被处理,所以每次加载页面时,结果都略有不同。

另外,我要指出的是,我并不试图优化这段代码。我试着做一个非常简单的可复制的例子。唯一的目的是指出性能上的差异,找出原因和解决办法。

更新4做了一些额外的测试,并发现了潜在的问题。由于某些原因,以下代码在coldfusion 2016 / Windows 2016上非常缓慢:

代码语言:javascript
复制
<cfset tmp = testQuery['ColumnA'][testQuery.currentrow]>

我发现非常奇怪的是,更新查询值并不慢。例如。

代码语言:javascript
复制
<cfset testQuery['ColumnA'][testQuery.currentrow] = key>

所有结果都可以在这里找到:http://136.144.177.152/test5.asphttp://136.144.177.152/test6.asp。我还在笔记本电脑上安装了coldfusion 2016,没有发现任何性能问题。我还尝试在windows 2012机器上安装coldfusion 2016。在这里,我发现了同样的性能问题。

基于Tomalak建议的更新5,我删除了索引访问符号。这显然是coldfusion 2016的一个性能问题。实际结果可以在这里找到http://136.144.177.152/bug-adobe.asp。我在adobe为这个问题打开了一个bug,https://tracker.adobe.com/#/view/CF-4201966

EN

回答 1

Stack Overflow用户

发布于 2018-04-11 17:15:29

首先,您正在将CF 9 Enterprise与CF 2016标准进行比较。对于这个例子来说应该不是什么大问题,但是如果你在标准上测试你的整个应用程序,你会发现问题的。我的前一家公司从9Ent迁移到了2016年,我们看到的只是全面的性能改善。当您看到瓶颈时,应该始终考虑重构。这是你升级的原因之一。

最大的问题是如何将query转换为struct。CF 2016具有更先进的功能。将您的遗留过程与这个利用查询对象中的成员函数的流程进行比较。

代码语言:javascript
复制
public array function arrayOfStructs(required query data) {
    var results = [];
    arguments.data.each(function(row) {
        arrayAppend(results, arguments.row);
    });
    return results;
}

query成员函数each()将每个row的内容引用为struct。不需要在每个列上循环,输入一个新键并分配一个值。轰隆隆!好了。快得像地狱一样。

做升级吧。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49771200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档