首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFloop处理极慢

CFloop处理极慢
EN

Stack Overflow用户
提问于 2014-09-13 22:39:49
回答 2查看 259关注 0票数 0

我正在教自己CF开发和使用一个共享的CF托管网站进行测试,因为我学习。

我有一个包含2500多个数据记录的电子表格,大约有15列。电子表格包含对此应用程序的基础至关重要的数据。它是脱机维护的,并定期使用cffile上传到服务器。上传后,电子表格将逐行导入到MySQL表中。

问题是时间太长了。例如,它现在正在运行。在过去的43分钟中,2500个记录中只有192个被添加到MySQL表中。有没有更有效的方法来做到这一点?

如果您查看下面的代码,它将在cfloop内部运行cfspreadsheet标记,并检索当前行。然后将该行作为"CSV“数据添加到MySQL表中。

对于如何更有效地完成这一任务,有什么建议吗?

代码语言:javascript
复制
<cfloop index="RecordNumber" from="2" to="#Records#" step="1"> 

    <cfspreadsheet action="read"
                format="csv"
                name="siteinfo"
                src="#floc#"
                headerrow="1"
                rows="#RecordNumber#" 
                columns="1-7,15,16,22,23"
                >

    <cfset ColumnCount = ListLen(siteinfo)>
    <cfset CSVSiteData = #siteinfo#>
    <cfset EntryType = "Site_Data">


    <cfquery name="Insertsite" datasource="TechData">
        INSERT INTO sitelist (EntryType, CSVSiteData, DateInserted)
        VALUES ('#EntryType#', '#CSVSiteDataf#', '#DateInserted#')
    </cfquery>

</cfloop>
EN

回答 2

Stack Overflow用户

发布于 2014-09-13 23:47:03

每次迭代都要读取整个XLS文件,只是为了获取一个行。只需读取文件一次(在循环之前),然后遍历其行。

票数 1
EN

Stack Overflow用户

发布于 2014-09-15 00:51:19

是的,我想找个办法防止每次打开电子表格,这个解决办法是.现在快多了..。

代码语言:javascript
复制
<body bgcolor="#0033FF">
    <cfset filenm = "SitesTest.xlsx">
    <cfset thisPath = GetDirectoryFromPath(ExpandPath("*.*"))>
    <cfset uploaddirectory = "#thisPath#Uploads\">
    <cfset uploadfile = "#uploaddirectory##filenm#">
    <cfset floc = "#uploadfile#">






<!--- --->
<!--- --->
<!--- --->


<!--- Read Spreadsheet Count number of Rows --->

<cfspreadsheet action="read"
                src="#floc#"
                headerrow="1"
                query="SiteSS"
                >

<cfset Records = "#SiteSS.RecordCount#">                
<!--- Get Header Row from Row 1 --->
<cfspreadsheet action="read"
                format="csv"
                name="ColumnHeaderRow"
                src="#floc#"
                headerrow="1"
                rows="1" 
                columns="1-7,15,16,22,23">

<cfset Headeritems = ListLen(ColumnHeaderRow)>

<cfset csvallVar = "">
<cfset CSVSiteData = "">


<cfspreadsheet 
        action = "read" 
        src="#floc#" 
        query="siteinfo" 
        rows="1-#Records#" 
        columns="1-7,15,16,22,23" >



<cfset rowcount = 2>

<cfloop Query="siteinfo" startrow="2" endrow="#Records#" > 

<cfset EntryType = "SiteInfo">

<!--- Create Line Item Lists--->
<cfset CSVSiteData = "#siteinfo.col_1#, #siteinfo.col_2#, #siteinfo.col_3#, #siteinfo.col_4#, #siteinfo.col_5#, #siteinfo.col_6#, #siteinfo.col_7#, #siteinfo.col_8#, #siteinfo.col_9#, #siteinfo.col_10#, #siteinfo.col_11#">

<cfset CSVSiteDataCheck = "#siteinfo.col_1#, #siteinfo.col_2#, #siteinfo.col_3#, #siteinfo.col_4#, #siteinfo.col_5#, #siteinfo.col_6#, #siteinfo.col_7#, #siteinfo.col_8#, #siteinfo.col_9#, #siteinfo.col_10#, #siteinfo.col_11#">

<cfset Manager = #siteinfo.col_1#>
<cfset Market = #siteinfo.col_2#>
<cfset FALocationCode = #siteinfo.col_3#>
<cfset USID = #siteinfo.col_4#>
<cfset CommonID = #siteinfo.col_5#>
<cfset EquipmentName = #siteinfo.col_6#>
<cfset EquipmentType = #siteinfo.col_7#>
<cfset PrimaryTech = #siteinfo.col_8#>
<cfset Address = #siteinfo.col_9#>
<cfset LatitudeDecimal = #siteinfo.col_10#>
<cfset LongitudeDecimal = #siteinfo.col_11#>



<!------>

<cfquery name="CheckDup" datasource="TechData">
    select CSVSiteData From sitelist2
    where CSVSiteData = '#CSVSiteDataCheck#'
</cfquery>


<cfif CheckDup.recordcount lt 1>

<cfquery name="Insertsite" datasource="TechData">
    INSERT INTO sitelist2 (
                            EntryType, 
                            CSVSiteData,
                            Manager, 
                            Market, 
                            FALocationCode, 
                            USID, 
                            CommonID, 
                            EquipmentName, 
                            EquipmentType, 
                            PrimaryTech, 
                            Address, 
                            LatitudeDecimal, 
                            LongitudeDecimal                            
                            )
    VALUES (
            '#EntryType#', 
            '#CSVSiteData#', 
            '#Manager#', 
            '#Market#', 
            '#FALocationCode#', 
            '#USID#', 
            '#CommonID#', 
            '#EquipmentName#', 
            '#EquipmentType#', 
            '#PrimaryTech#', 
            '#Address#', 
            #LatitudeDecimal#, 
            #LongitudeDecimal#
            )
</cfquery>



"Record <cfoutput>#rowcount#</cfoutput> added"<br />
<cfelse>
"Record <cfoutput>#rowcount#</cfoutput> not added"<br />
</cfif>




<cfset rowcount = rowcount + 1>
</cfloop>






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

https://stackoverflow.com/questions/25828422

复制
相关文章

相似问题

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