2

TCL C API を使用してファイルを読み取り、TCL 配列にデータを入力することは、標準の TCL で同じことを行うよりもはるかに高速です。いくつかのハッシュ エントリを読み取って設定する必要がある約 100 MB 以上の大きなファイルがあります。TCL C API を使用しても、最大で 2 倍から 4 倍の速度の利点は得られないようです。これは通常のことですか、それとも何か不足していますか?

4

3 に答える 3

3

この場合、パフォーマンスが大幅に向上する可能性は低いです。C API から配列エントリを設定する場合、コードを内部で Tcl として記述した場合に発生するコストの多くを負担することになるからです。手続き。特に、非効率的なサブ API を使用すると、パフォーマンスが簡単に低下する可能性があります。一部の Tcl の API 関数はあまり高速ではありませんが (例: Tcl_SetVar)、それらを使用する既存のコードが大量にあるため (また、高速な関数を使用するにはより多くの C コードが必要になるため)、そのまま残されています。配列要素を設定するには必須のハッシュ テーブル ルックアップが必要であり、それらには実際のコストがかかることに注意してください (Tcl が非常に高速な — むしろばかげた — ハッシュを使用しているにもかかわらず)。

さらに、Tcl リストまたはディクショナリを使用することでパフォーマンスを向上させることができ (正確に何を格納したいかによって異なります)、それらに対する C API は非常に高速です (特に、実際にはTcl_Obj参照の C 配列であるリストの場合)。私が知らないのは、それを行うことがあなたの目的の適切な代替になるかどうかです。

于 2012-07-26T10:16:07.973 に答える
2

C API は、主に Tcl 拡張機能を記述できるようにするためにあり、「純粋な Tcl」自体が記述されているルーチンを公開するだけです。あなたが説明したような場合、パフォーマンスの違いはあまり期待できず、覚えています。

時期尚早の最適化は、プログラミングにおけるすべての悪 (または少なくともその大部分) の根源です。

芸術としてのコンピュータプログラミング (1974) ドナルド・クヌース著

于 2012-07-26T06:48:09.240 に答える
1

本当に大量のデータをロードする必要がある場合は、NAP (http://wiki.tcl.tk/4015) などの拡張機能が適切でしょうか?

于 2012-07-26T08:17:18.713 に答える