Loops 对于重复性任务,我应该使用cfobject还是cfinvoke?

Loops 对于重复性任务,我应该使用cfobject还是cfinvoke?,loops,coldfusion,cfinvoke,Loops,Coldfusion,Cfinvoke,我需要在一组图像路径上循环,以获取、调整和存储从外部目标到S3的图像 我习惯于打电话给cfcs这样做: <cfinvoke component="form_img_handler" method="upload" returnvariable="imgSuccess"> <cfinvokeargument name="command" value="upload_search"/> <cfinvokeargument name="imgPath" v

我需要在一组图像路径上循环,以获取、调整和存储从外部目标到S3的图像

我习惯于打电话给cfcs这样做:

<cfinvoke component="form_img_handler" method="upload" returnvariable="imgSuccess">
    <cfinvokeargument name="command" value="upload_search"/>
    <cfinvokeargument name="imgPath" value="#results.bildpfad #"/>
    <cfinvokeargument name="imgFile" value="#results.bilddateiname#"/>
    <cfinvokeargument name="sellerILN" value="#results.iln#"/>
    <cfinvokeargument name="cookie" value="#variables.screenWidth#"/>
</cfinvoke>

问题:
如果我必须在循环中执行25次,那么使用
cfobject
而不是
cfinvoke
会更好吗?据我所知,
cfinvoke
被实例化,运行它的作业,然后消亡。而
cf对象
将留在那里。如果是这样,在上述情况下使用
cfobject
是否更好?如果是这样,我将如何调用我的
upload
函数(传递参数),以及在完成后如何删除对象

(以前从未使用过cfobject…)


谢谢你的帮助

使用
CreateObject
实例化对象并将其分配给变量:

<cfset handler = CreateObject("component", "form_img_handler")>
<cfset handler.upload(URL.command, URL.imgPath ... )>


在实例化对象一次后,可以调用循环中的第二行。

也可以使用类似于

外部循环(可能在全局范围内,例如应用程序):

内部循环:

<cfset imgSuccess = form_img_handler.upload
    ( command   = "upload_search"
    , imgPath   = results.bildpfad
    , imgFile   = results.bilddateiname
    , sellerILN = results.iln
    , cookie    = variables.screenWidth
    )/>

因为它更具可读性


您没有性能问题,除非您有一个可重复的测试用例证明您有性能问题


关于删除对象…
如果不将对象放置在持久作用域中,则不必担心删除它们——它们只与请求关联,一旦请求结束,它们将根据需要进行垃圾收集


如果要将对象放置在持久作用域中,可能仍然不需要担心删除它们,但如果确定要删除,可以使用StructDelete删除它(就像任何其他变量一样)。当然,在需要时,您应该小心不要这样做。

您可以使用
cfinvoke
重用对象。你只是看不到很多这样的例子。也就是说,cfinvoke语法对我来说太庞大了:)我更喜欢Cody和Peter的方法。。。如果有多个用户启动
上载
,会发生什么情况?这些是按顺序运行还是同时运行?如果我在会话范围中设置对象,会有什么不同吗?这取决于组件内部的逻辑。确保变量的作用域正确,避免文件名冲突,等等,这样对同时使用的用户就可以正常工作。确定。因此,在我的cffunction中,我声明var LOCAL={},并在其中存储我需要的所有内容(LOCAL.xyz=“value”),包括传递的参数。应该可以吧?
<cfset imgSuccess = form_img_handler.upload
    ( command   = "upload_search"
    , imgPath   = results.bildpfad
    , imgFile   = results.bilddateiname
    , sellerILN = results.iln
    , cookie    = variables.screenWidth
    )/>