优化若干性能问题

This commit is contained in:
taocong
2026-09-22 15:15:22 +08:00
committed by taocong
parent afb8161648
commit 43e184bffb
118 changed files with 5518 additions and 6372 deletions
+17 -8
View File
@@ -3,6 +3,7 @@
#include "ElaTheme.h"
#include "src/utils/configmanager.h"
#include "src/utils/logmanager.h"
#include "src/utils/Constants.h"
#include "src/utils/version.h"
#include <QApplication>
#include <QElapsedTimer>
@@ -113,6 +114,12 @@ int main(int argc, char *argv[])
QApplication a(argc, argv);
a.setWindowIcon(QIcon(":resources/images/ChangeCode.png"));
// 日志初始化提前到单实例检测之前: 双实例退出路径的警告必须能落盘,
// 否则 writeLog 的文件分支静默跳过, "检测到已有实例"只上控制台无痕迹。
// QApplication 已就绪, initLogConfig 依赖的 applicationDirPath 可用
LogManager::instance()->initLogConfig();
LogManager::instance()->initLogFile();
// 单实例保护: 双开会并发互写日志文件、并发覆盖 config.ini, 还会重复弹出升级提示。
// QLockFile 持有方进程崩溃后残留锁可被下次启动自动接管(按锁内 PID 探测存活)
const QString lockPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation)
@@ -156,14 +163,16 @@ int main(int argc, char *argv[])
// 排除用户输入事件: 启动阶段积压的鼠标/键盘事件若被分发, 可能触发意料之外的
// 焦点/点击行为(例如误点即将出现的窗口), 只处理绘制类事件保证 splash 正常上屏
a.processEvents(QEventLoop::ExcludeUserInputEvents);
// 强制全量同步重绘: show 后首个 paint 可能只覆盖部分暴露区域(分块 flush),
// 而后续 MainWindow 构造期约 340ms 事件循环饥饿, 未 flush 的区域保持
// 未初始化白色, 表现为启动画面"上半蓝、下半白"残影
splash.update();
splash.repaint();
// 安装全局过滤器:所有页面文字 / 表格树单元格允许用户复制
TextSelectableFilter textSelectableFilter;
a.installEventFilter(&textSelectableFilter);
// 日志初始化提前到启动最前: 此后所有分段耗时都能落盘, 便于排查启动瓶颈
LogManager::instance()->initLogConfig();
LogManager::instance()->initLogFile();
mark("QApplication 就绪");
eApp->init();
@@ -173,15 +182,15 @@ int main(int argc, char *argv[])
// 必须在主窗口构造前设置, 保证主窗口首帧即为正确主题, 避免启动后闪色。
// 此前主题从未被应用(设置页 onThemeChanged 为空), 界面始终是 Ela 默认夜间模式
{
QSettings settings("UFT30", "ChangeCode");
const QString theme = settings.value("Theme", "夜间模式").toString();
QSettings settings(Constants::AppSettings::Org, Constants::AppSettings::App);
const QString theme = settings.value(Constants::AppSettings::ThemeKey,
Constants::AppSettings::ThemeDark).toString();
ElaTheme::getInstance()->setThemeMode(
theme == QString::fromUtf8("日间模式") ? ElaThemeType::Light : ElaThemeType::Dark);
theme == Constants::AppSettings::ThemeLight ? ElaThemeType::Light : ElaThemeType::Dark);
mark("主题模式应用完成");
}
QString basePath = QCoreApplication::applicationDirPath();
ConfigManager::instance()->loadConfig(basePath);
ConfigManager::instance()->loadConfig();
mark("config.ini 加载完成");
int exitCode = 0;