perf: 启动时合并4次文件读取解析为1次,加速右键打开大钻带

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-23 17:13:53 +08:00
parent b009ece1cd
commit 41bba7f8aa

View File

@@ -36,10 +36,25 @@ namespace DrillTools
// 防止选择窗口关闭后触发 OnLastWindowClose 导致应用退出
ShutdownMode = ShutdownMode.OnExplicitShutdown;
bool canClearParameters = CanClearDrillTapeParameters(filePath);
bool canGeneratePpDrillTape = CanGeneratePpDrillTape(filePath);
GetMinDiameters(filePath, out double minDrill, out double minSlot, out double minEA);
GetPpSpacing(filePath, out bool isPpDrillTape, out double ppXSpacing, out double ppYSpacing);
// 只读取和解析文件一次,提取所有需要的信息
string content = CommandTypeFileReader.ReadAllText(filePath);
var viewModel = new MainWindowViewModel
{
IsStartupDrillTapeFile = true,
OriginalFilePath = filePath,
ShouldCheckSortFileOnLoad = false
};
viewModel.LoadToolsFromDrillTape(content);
bool canClearParameters = DrillTapeParameterCleaner.CanClearParameters(content);
bool canGeneratePpDrillTape = viewModel.CanGeneratePpDrillTape;
double minDrill = viewModel.MinDrillDiameter;
double minSlot = viewModel.MinSlotDiameter;
double minEA = viewModel.MinEADiameter;
bool isPpDrillTape = viewModel.IsPpDrillTape;
double ppXSpacing = viewModel.PpXSpacing;
double ppYSpacing = viewModel.PpYSpacing;
var selectionWindow = new StartupSelectionWindow(filePath, canClearParameters, canGeneratePpDrillTape, minDrill, minSlot, minEA, isPpDrillTape, ppXSpacing, ppYSpacing);
selectionWindow.ShowDialog();
@@ -114,93 +129,6 @@ namespace DrillTools
}
}
private static bool CanClearDrillTapeParameters(string filePath)
{
try
{
string content = CommandTypeFileReader.ReadAllText(filePath);
return DrillTapeParameterCleaner.CanClearParameters(content);
}
catch
{
return false;
}
}
private static bool CanGeneratePpDrillTape(string filePath)
{
try
{
var viewModel = new MainWindowViewModel
{
IsStartupDrillTapeFile = true,
OriginalFilePath = filePath,
ShouldCheckSortFileOnLoad = false
};
string content = CommandTypeFileReader.ReadAllText(filePath);
viewModel.LoadToolsFromDrillTape(content);
return viewModel.CanGeneratePpDrillTape;
}
catch
{
return false;
}
}
private static void GetMinDiameters(string filePath, out double minDrillDiameter, out double minSlotDiameter, out double minEADiameter)
{
minDrillDiameter = 0;
minSlotDiameter = 0;
minEADiameter = 0;
try
{
var viewModel = new MainWindowViewModel
{
ShouldCheckSortFileOnLoad = false
};
string content = CommandTypeFileReader.ReadAllText(filePath);
viewModel.LoadToolsFromDrillTape(content);
if (viewModel.Tools.Count > 0)
{
minDrillDiameter = viewModel.MinDrillDiameter;
minSlotDiameter = viewModel.MinSlotDiameter;
minEADiameter = viewModel.MinEADiameter;
}
}
catch
{
}
}
private static void GetPpSpacing(string filePath, out bool isPpDrillTape, out double ppXSpacing, out double ppYSpacing)
{
isPpDrillTape = false;
ppXSpacing = 0;
ppYSpacing = 0;
try
{
var viewModel = new MainWindowViewModel
{
OriginalFilePath = filePath,
ShouldCheckSortFileOnLoad = false
};
string content = CommandTypeFileReader.ReadAllText(filePath);
viewModel.LoadToolsFromDrillTape(content);
isPpDrillTape = viewModel.IsPpDrillTape;
ppXSpacing = viewModel.PpXSpacing;
ppYSpacing = viewModel.PpYSpacing;
}
catch
{
}
}
private static void PerformPpDrillTapeGeneration(string filePath)
{