如何在.NET

时间:2015-12-22 10:29:28

标签: c# .net makefile

我目前正在研究一种可以衡量.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”命令并检索所述命令的输出。当然,我想在每次传递到下一个模块时在一个新线程中启动此方法,但显然等待它们完成与顺序方法相同。

谢谢!

1 个答案:

答案 0 :(得分:0)

您是否也可以共享GetSourceFiles.ExecuteW()实现? 看起来您可以使用async / await来提高整体性能。