亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 1895 | 回復(fù): 14
打印 上一主題 下一主題

請教關(guān)于我的程序的優(yōu)化策略和思路.請進 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2004-08-16 09:18 |只看該作者 |倒序瀏覽
在我的項目中,我需要對產(chǎn)生的xml文件進行解析,然后存入數(shù)據(jù)庫.程序都用C實現(xiàn).現(xiàn)在每個xml文件大概有2250條紀(jì)錄,需要解析的xml文件有400個.經(jīng)過測試,每次解析這樣一個xml文件,到存入數(shù)據(jù)庫,需要11秒左右.那么我在想總共400多個的話,總需時間4000多秒(一個多小時).這樣的時間對整個項目來說,對用戶來說是不可容忍的.所以想請大家給我出出主意和思路.如何提高效率?或者說我的程序問題出在哪里??以下是我的主要考慮思路:
1.我可以改變產(chǎn)生的文件類型,比如產(chǎn)生文本類型代替xml文件,這樣解析文本文件會比xml文件快嗎?請有經(jīng)驗的人士指教
2.如果解析文本文件,那么我可以用shell來實現(xiàn)解析和入庫,這樣會不會快一點.
3.另外按照現(xiàn)有的方式(用C實現(xiàn)),程序執(zhí)行總的時間比較大.是否有其他方法可以提高速度?比如用多進程或多線程?兩者速度可以提高多少?

論壇徽章:
0
2 [報告]
發(fā)表于 2004-08-16 09:35 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

1.解析文本文件肯定比解析XML快,而裸數(shù)據(jù)文件又比文本文件快。
2.shell不會比C寫的專用程序快。
3.多進程或多線程對總時間上肯定會大幅度縮短。
我覺得你的問題出在你的XML解析上,2250條記錄不應(yīng)該用11秒,XML庫的效率和你的程序的效率二者至少一方還大有潛力可挖。
理想的結(jié)果是,開若干個進程或線程(如10個),排隊解決400個文件。

論壇徽章:
0
3 [報告]
發(fā)表于 2004-08-16 10:21 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

xml本身也是文本文件,只是格式化過的。一般如果記錄是內(nèi)部使用,格式相對固定,用一種固定字段長度的文本格式保存會減少解析復(fù)雜度。
不知道你解析xml用的是什么辦法,msdom?mssax?expat?或str解析?
在算法上來說理論上mssax和expat工具包都可以提供比dom更快的速度。
如果各數(shù)據(jù)文件之間沒有什么關(guān)聯(lián),建議用多進程或多線程處理文件,注意不要重復(fù)或漏處理文件,并cpu消耗可以接受即可。

論壇徽章:
0
4 [報告]
發(fā)表于 2004-08-16 10:38 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

謝謝.兩位的回復(fù).文本文件的格式不是很標(biāo)準(zhǔn),但是都是一行一條紀(jì)錄的.也可以方便的解析.我解析xml是用libxml2庫的.都是用標(biāo)準(zhǔn)C寫的.今天我重新在本地linux機器上測試了以下,解析入庫2250條紀(jì)錄,只需化4-5秒中,可能我上次在遠(yuǎn)程的服務(wù)器上測的不準(zhǔn)的緣故.前幾天用fork(),用兩進程來執(zhí)行,發(fā)現(xiàn)感覺時間上面也快不了多少阿.是不是我要fork多個進程(大于2個)才能提高效率??

論壇徽章:
0
5 [報告]
發(fā)表于 2004-08-16 11:11 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

你還可以采用如下一些手段:
1.優(yōu)化你的程序,盡量用帶有緩沖的IO,比如用fread代替read等。
2.調(diào)整數(shù)據(jù)庫和系統(tǒng)參數(shù)。
如果2個進程差別不大,說明你的時間大概主要是花在IO上了。

論壇徽章:
0
6 [報告]
發(fā)表于 2004-08-16 15:06 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

請問要實現(xiàn)10個.20個進程怎么寫?難道是子進程嵌套??然后if else??這樣總覺得很別扭阿?有沒有好的寫法阿?或者有沒有什么進程池之類的??謝謝

論壇徽章:
0
7 [報告]
發(fā)表于 2004-08-16 15:32 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

[quote]原帖由 "harry_li"]請問要實現(xiàn)10個.20個進程怎么寫?難道是子進程嵌套??然后if else??這樣總覺得很別扭阿?有沒有好的寫法阿?或者有沒有什么進程池之類的??謝謝[/quote 發(fā)表:


for(i=0;i<20;i++)
{
   pid = fork();
   if(pid<0)       break; //error
   if(pid ==0)    break; //child
   if(pid >; 0)     continue; //father
}

進程池的問題可大可小。個人認(rèn)為做的很好的是apache1.3x的進程池。不過你這個case里應(yīng)該可以不考慮這個設(shè)計,一次啟動足夠的進程不停跑就可以了。

論壇徽章:
0
8 [報告]
發(fā)表于 2004-08-16 15:38 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

父進程統(tǒng)一管理所有的文件,產(chǎn)生若干子進程,為每個子進程分配一個文件,然后等待子進程完成。
當(dāng)有某個子進程完成時,記錄該子進程的狀態(tài)。如果還有未處理文件,則再產(chǎn)生一個新的子進程并分配一個文件。
直到所有子進程完成。

論壇徽章:
0
9 [報告]
發(fā)表于 2004-08-16 15:40 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

哦謝謝你的回復(fù).那么還有問題,我怎樣才能把參數(shù)傳給某個進程處理呢?比如我要求,子進程1處理文件名為1,子進程2處理文件名2,子進程3處理文件名為3.......????謝謝

論壇徽章:
0
10 [報告]
發(fā)表于 2004-08-16 16:25 |只看該作者

請教關(guān)于我的程序的優(yōu)化策略和思路.請進

[quote]原帖由 "harry_li"]哦謝謝你的回復(fù).那么還有問題,我怎樣才能把參數(shù)傳給某個進程處理呢?比如我要求,子進程1處理文件名為1,子進程2處理文件名2,子進程3處理文件名為3.......????謝謝[/quote 發(fā)表:


for(i=0;i<20;i++)
{
pid = fork();
if(pid<0) break; //error
if(pid ==0) break; //child .這時break之后,i就可以標(biāo)志是第幾個子進程了
if(pid >; 0) continue; //father
}
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP