다음은이 문제를 설명하기위한 최소 예입니다. 버튼을 클릭하면 텍스트가 포함 된 500 개의 TextView 객체가 추가됩니다. 실제로 일어나는 일은 짧은 지연이 있고, 500 개의 비어있는 TextView가 추가되고, 더 긴 지연이 있으며, 그 후에 텍스트가 즉시 채워지고 레이아웃 자체가 적절하게 크기가 정해집니다. 아래 코드 :한 번에 많은 텍스트 뷰를 추가 할 때 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