下面是說明問題的最簡單示例。單擊按鈕時,應添加500個TextView對象,每個對象都包含一些文本。實際發生的情況是,有一個短暫的延遲,添加了500個空的TextViews,延遲時間更長,然後它們都會立即填充文本,並且佈局自行調整。下面的代碼:gtkd一次性添加大量文字查看時的gtkd性能問題
import gtk.Button;
import gtk.Main;
import gtk.MainWindow;
import gtk.Notebook;
import gtk.ScrolledWindow;
import gtk.Statusbar;
import gtk.TextView;
import gtk.TextBuffer;
import gtk.UIManager;
import gtk.VBox;
import gtk.Window;
import std.stdio;
class UI : MainWindow
{
Notebook notebook;
this() {
super("Test");
setDefaultSize(200, 100);
VBox box = new VBox(false, 2);
notebook = new Notebook();
Button button = new Button("add lines");
button.addOnClicked(&addLines);
box.packStart(notebook, true, true, 0);
box.packStart(button, false, false, 2);
add(box);
showAll();
}
void addLines(Button b) {
VBox box = new VBox(false, 2);
for (int i = 0; i < 500; i++) {
auto tv = new TextView();
tv.getBuffer().setText("line");
box.packStart(tv, false, false, 1);
}
ScrolledWindow swin = new ScrolledWindow(box);
notebook.add(swin);
showAll();
}
}
void main(string[] args)
{
Main.init(args);
auto ui = new UI();
Main.run();
}
編輯:this thread說明,創建了一堆的文本視圖在本質上是昂貴的,我應該使用一個TreeView被改寫。
同意,我會使用樹視圖。 – ptomato 2012-04-26 07:12:18