读FCStd文件的速度
次数 时间
100 3S
1000 21S
10000 208S
读取的图形如下:
代码:
setlocale(LC_NUMERIC, "C");
_putenv("PYTHONPATH=");
App::Application::Config()["ExeName"] = "FreeCAD";
App::Application::Config()["ExeVendor"] = "FreeCAD";
App::Application::Config()["AppDataSkipVendor"] = "true";
App::Application::Config()["MaintainerUrl"] = "http://www.freecadweb.org/wiki/index.php?title=Main_Page";
// set the banner (for logging and console)
App::Application::Config()["CopyrightInfo"] = sBanner;
App::Application::Config()["AppIcon"] = "freecad";
App::Application::Config()["SplashScreen"] = "freecadsplash";
App::Application::Config()["StartWorkbench"] = "StartWorkbench";
//App::Application::Config()["HiddenDockWindow"] = "Property editor";
App::Application::Config()["SplashAlignment"] = "Bottom|Left";
App::Application::Config()["SplashTextColor"] = "#ffffff"; // white
App::Application::Config()["SplashInfoColor"] = "#c8c8c8"; // light grey
char *argv[1] = { "E:\\VC\\FreeCAD\\Build\\bin" };
//char str_test[] = "E:\\VC\\FreeCAD\\Build\\bin";
//char** pp = &str_test;
App::Application::init(1, argv);
App::Application* CurApp = &App::GetApplication();
SYSTEMTIME sys;
GetLocalTime(&sys);
int m1 = int(sys.wMinute);
int s1 = int(sys.wSecond);
s1 += m1 * 60;
App::Document* pDoc = NULL;
for (int i = 0; i < 10000; i++)
{
pDoc = CurApp->openDocument("E:\\FreeCADTest\\Pup.FCStd");
CurApp->closeDocument(pDoc->getName());
}
SYSTEMTIME sys2;
GetLocalTime(&sys2);
int m2 = int(sys2.wMinute);
int s2 = int(sys2.wSecond);
s2 += m2 * 60;
int sss = s2 - s1;
char buf[100];
sprintf(buf, "%d", sss);
MessageBoxA(NULL, buf, NULL, MB_OK);
以下是余测试结果:
Freecad大文件:
Freecad大文件打开关闭10000次
771s
743s
729s
Freecad大文件删除单个布尔类型打开关闭10000次
701s
715s
748s
729s
10个方形拉伸体打开关闭10000次
491s
495s
10个方形基本体打开关闭10000次
266s
265s
10个基本体进行布尔运算(5个运算后的对象) 打开关闭10000次
440s
455s
打开基本体文件1000次
25s
26s
26s
打开freeCAD大文件1000次
69s
70s
69s
结论:打开freecad文件时,freecad中图形越多,时间越慢。图形越复杂(拉伸体>基本体)时间越慢。
//
直接循环 10000次
0s
打开doc,后续map中查找10000次
0s
EP3d解析表格数据(上下文RunID)以及EP3d转换模型(转换为GM)10000次。
92s
96s
92s
88s
87s
98s
EP3d解析表格数据(上下文RunID)直接返回 10000次
77s
78s
79s
75s
77s
74s
75s
73s
81s
73s
EP3d解析表格数据去除EP3d上下文RunId解析。
1s
1s
Freecad大文件解析表格,去除EP3d上下文RunId解析,设置不同数据 1000次(表格数据不同)
74s
76s
65s
65s
64s
Freecad大文件解析表格,去除EP3d上下文RunId解析,设置不同数据 1000次(表格数矩相同)
64s
63s
Freecad大文件解析表格,去除EP3d上下文RunId解析,只设置一个值 1000次
74s
76s
65s
65s
64s
Freecad大文件解析表格,去除EP3d上下文RunId解析,设置不同数据 1000次,去除recompute
0s
10个基本体文件解析表格,去除EP3d上下文RunId解析,设置不同数据 1000次。
5s
6s
6s
6s
6s
结论:1.EP3d通过上下文得数据,和解析端口转换为gm过程会消耗一定时间。(1000次上下文数据 6.5s左右,解析端口转换gm 2s).
2.freecad设置表格数据,recompute会消耗较多时间,图形越复杂也接近重新打开文件的时间(freecad大文件打开关闭1000次69s,不同数据recompute 1000次65s),图形简单消耗时间越少(10个基本体文件1000次时间6s)。
3.freecad设置表格数据时,只是设置1个值和多个值所消耗时间区别不大。设置值不关联图形也需要消耗对应时间。