ColdFusion JavaCast() Adds No Performance Hit
I love the fact that Java lives up ColdFusion's skirt. That is exciting. What's not as exciting is the fact that, in a seemingly random fashion, ColdFusion has trouble performing automatic casts from ColdFusion data types to Java data types. I have never really used JavaCast() to do this unless an actual error was being thrown. However, as I start to write more and more UDFs that harness Java, I have to get into the practice of doing a JavaCast() in every required place. This will make the inner working of the UDF are as black-boxed as possible.
I was concerned that JavaCast() method calls would be adding a lot of overhead to the page request. Each method call has on overhead to it. But, I am excited to say that after some basic speed testing, JavaCast() shows no apparent processing overhead. My tests were basic; I created a Java string, initialized it with a ColdFusion string (with and without a Cast) and then Upper-Cased the string:
<cftimer label="No Java Cast" type="outline">
<!--- Loop 10,000 times. --->
<cfloop index="intI" from="1" to="10000" step="1">
<!--- Create a string based on date/time. --->
<cfset strText = ("Now is " & Now()) />
<!--- Create an upper cased string using Java. --->
<cfset strUpperCase = CreateObject(
"java",
"java.lang.String"
).Init( strText ).ToUpperCase() />
</cfloop>
</cftimer>
<cftimer label="Java Cast" type="outline">
<!--- Create a string based on date/time. --->
<cfloop index="intI" from="1" to="10000" step="1">
<!--- Create a string based on date/time. --->
<cfset strText = ("Now is " & Now()) />
<!--- Create an upper cased string using Java. --->
<cfset strUpperCase = CreateObject(
"java",
"java.lang.String"
).Init(
JavaCast( "string", strText )
).ToUpperCase() />
</cfloop>
</cftimer>
Both of these tests performed anywhere from 450 ms to 550 ms. Neither of them showed any real trending towards better or worse.
Reader Comments