2017-12-08 11 views
0

私はパッケージを書いた/書き直して、完全にテストしたいと思います。特に、大量のデータがパッケージにロードされると、クロールが遅くなります。私はテストのためにwiki.tcl.tkTCLパッケージのテスト。効率のために調整する

でコードを掲載している

あなたは12列& 10,000行を持っていることを前提としています。私が問題に遭遇した はTcl2ExXML::outputXMLです。 これをテストし、どこでクロールしているかを修正するにはどうしたらいいですか?

set Test_WB   ""; 
set Test_WS   ""; 
set ErrorHeadder ""; 
set ErrorText  ""; 
set NormalHeadder ""; 
set DateCol   ""; 

set Test_WB  [Tcl2ExXML::CreateWorkbook  "MassOrderLoad_[clock format [clock seconds] -format %Y%m%d%H%M%S]"] 
set Test_WS  [Tcl2ExXML::CreateWorkSheet  $Test_WB "TestWS-[clock format [clock seconds] -format %Y-%m-%d]"] 
set ErrorHeadder  [Tcl2ExXML::CreateStyle   $Test_WB -algnmt {-v bottom -h center} -font {-nm "Calibri" -ff "Swiss" -sz 14 -fC#FF0000 -b 1} -border {{top bottom left} -ls "continuous" -lw 3} -interior {-iC#DCE6F1 -ip "Solid"}] 
set ErrorText   [Tcl2ExXML::CreateStyle   $Test_WB -algnmt {-v bottom -h center} -wrap 1 -font {-nm "Calibri" -ff "Swiss" -sz 11 -fC#FF0000}] 
set NormalHeadder  [Tcl2ExXML::CreateStyle   $Test_WB -algnmt {-v bottom -h center} -font {-nm "Calibri" -ff "Swiss" -sz 14 -fC#000000 -b 1} -border {-bp {top bottom} -ls "continuous" -lw 3 -bp {left right} -ls "continuous" -lw 1} -interior {-iC#DCE6F1 -ip "Solid"}] 
set DateCol   [Tcl2ExXML::CreateStyle   $Test_WB -datafmt ymd] 
         Tcl2ExXML::setColumnAttributes $Test_WS 26 -s $DateCol 
         Tcl2ExXML::setColumnAttributes $Test_WS 27 -s $DateCol 
set RowNum    [Tcl2ExXML::addRow $Test_WS -s $ErrorHeadder ERROR_MSG -s $NormalHeadder OPERATION \ 
                -s $NormalHeadder RowData_1 -s $NormalHeadder RowData_2 \ 
                -s $NormalHeadder RowData_3 -s $NormalHeadder RowData_4 \ 
                -s $NormalHeadder RowData_5 -s $NormalHeadder RowData_6 \ 
                -s $NormalHeadder RowData_7 -s $NormalHeadder RowData_8 \ 
                -s $NormalHeadder RowData_9 -s $NormalHeadder RowData_10] 

foreach Row $DataList 
    lassign $Row C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 
    set RowNum    [Tcl2ExXML::addRow $Test_WS -s $ErrorText $C1 $C2 $C3 $C4 $C5 $C6 $C7 $C8 $C9 $C10 $C11 $C12] 
} 

set XML [Tcl2ExXML::outputXML $Test_WB] 
puts "XML Created, Cleaning up." 
puts $Chan $XML 
close $Chan 

Tcl2ExXML::DeleteWorkbook $Test_WB 
+0

あなたの 'outputXML'コマンドはXMLテキストを含む文字列を構築するために何千回も連続して' append'を呼び出してXMLを作成します。それはいつも時間がかかるでしょう。代わりに 'tDOM'のようなものを使用して、ドキュメントのDOM構造を構築し、完了したらXMLテキストを生成させます。 –

+0

これをどのように実装するかを見ていきます。提案していただきありがとうございます。 – CK1

答えて

0

あなたがここで求めていることは多種あり、問題の可能性があります。問題を小さなものに分割し、それを自分で測定できますか?重大な問題がどこにあるのか理解してみてください。 (timeコマンドは、いくつかのハードデータを取得するのに役立ちます)。

基本的な問題は出力が大きいということだけである場合、一時ファイルに書き込むことが最適なオプションかもしれません。しかし、必ずしもそれを助けるつもりはありません。

が貫通スキャンしたので、私はいくつかの潜在的に高価な操作を参照してください。特に、clock formatおよびarray namesは安価であることは知られていない。彼らが問題だとは言えません。上記の掘り下げのステップは非常に重要です。

+0

お返事ありがとう@Donal。私が言ったように、私はそれが主にTcl2ExXML :: outputXML関数であり、全体のプロセスを遅らせていると思います。私はFlight AwareからSpeedTablesを使用することを考えましたが、それは完全な書き換えが必要で、私はそれらを使ったことがないので、彼らがどのように動作するかを調べる必要があります。私は、Activestate TCLデバッガを使用して結果を調べています。しかし、その上での適切な使用に関する知識は限られています。 – CK1

+0

私は 'time'で部分をラップし、私が何を思いつくのかを見ます。あなたが貸すことができる他のポインタはありますか? – CK1

+0

試しに小さなセットを選ぶことが本当に難しいということは、それほど多くのオプションがあります。ボトルネックが最初にある場所を絞り込みます。 (また、正確にどのバージョンのTclを使用していますか?高速で何が変化していないのかのプロファイル)。 –

関連する問題