我目前正在研究一种可以衡量.c源文件代码指标的工具。首先,我必须检索在构建过程中使用的.c源文件,因此我必须评估每个模块中的make文件。 (请记住,我只需要构建过程中使用的源代码,因此必须评估make文件)
对于中型项目,如果我按顺序执行此操作,则需要大约24秒才能完成此作业以及我执行的其他小型作业。 我还尝试为每个模块启动一个新线程,并在单独的线程上评估文件,但我还必须等待它们全部完成任务,并且还需要大约24秒等待所有线程。 (这可能是由于单个模块太大,也是)
在这两种情况下,我都获得了正确的源文件列表,但我想优化算法。这是代码:
private void GetCodeMetrics()
{
SourceFilesList.Clear();
string LoadModules = getModulesFile();
string[] ListOfModules = LoadModules.Split(' ');
foreach (string Module in ListOfModules)
{
UpdateListOfSources(ModulePath);
}
}
private void UpdateListOfSources(string ModulePath)
{
//Here I use a class implemented by me.
//This class has a method which launches a command line and returns the output of this command.
//In my situation the returned output is the list of source files found in the make file
string LoadSources ="";
string[] ListOfSources = null;
// var GetSourcesThread = new Thread(
// () =>
// {
//The GetSourceFiles.ExecuteW() returns a string which contains the list of sources
LoadSources = GetSourceFiles.ExecuteW();
ListOfSources = LoadSources.Split('/');
// }
// );
// GetSourcesThread.Start();
// GetSourcesThread.IsBackground = true;
// GetSourcesThread.Join();
foreach (string Source in ListOfSources)
{
string SourceListElement = ModulePath + @"\\" + SourceName;
SourceFilesList.Add(SourceListElement);
}
}
有谁知道如何改善执行时间?
注意:如前所述,代码有效。它返回所有源文件,但需要花费很多时间。 “ExecuteW()”需要很多工作才能完成,因为它启动了“make”命令并检索所述命令的输出。当然,我想在每次传递到下一个模块时在一个新线程中启动此方法,但显然等待它们完成与顺序方法相同。
谢谢!
答案 0 :(得分:0)
您是否也可以共享GetSourceFiles.ExecuteW()实现? 看起来您可以使用async / await来提高整体性能。