ASP.NET MVC Подпроцесс Возвращаемые значения - PullRequest
0 голосов
/ 08 октября 2019

Я написал такой код

public void GitConnectAndFetch()
{   
    try
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("git.exe");
        startInfo.UseShellExecute = false;                
        startInfo.WorkingDirectory = projectPath;                
        startInfo.RedirectStandardInput = true;
        startInfo.RedirectStandardOutput = true;
        startInfo.Arguments = "branch -a";
        Process process = new Process();
        process.StartInfo = startInfo;
        process.Start();
        string branchname = "";
        List<SelectListItem> ddgit = new List<SelectListItem>();
        while (process.StandardOutput.Peek() >= 0)
        {
            branchname = process.StandardOutput.ReadLine().Trim();
            if (branchname.Trim().StartsWith("remotes/origin/"))
            {                       
                ddgit.Add(new SelectListItem { Text = branchname.ToString().Replace("remotes/origin/",""), Value = branchname.ToString() });
            }
        }
        if (ddgit.Count == 0) ddgit.Add(new SelectListItem() { Text = "", Value = "" });
        process.WaitForExit();
        ViewBag.Branchlist = ddgit;
    }
    catch (Exception ex)
    {
        localLog(ex.Message);
        localLog(ex.StackTrace);
    }
}

[HttpGet]
public ActionResult Main()        
{
    GitConnectAndFetch();
    return View();
}

И я назвал его снова после сообщения

[HttpPost]
public ActionResult Otomasyon(FormCollection form)
{
    GitConnectAndFetch();                    
    return View();
}

Я думаю, что подпроцесс работает медленно, и я вызываю его дваждычтобы заполнить выпадающий список на моей главной странице, как я могу его запустить за один раз, чтобы закрыть.

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Прежде всего, метод GitConnectAndFetch имеет побочные эффекты (установка данных в ViewBag), это не хорошо. Преобразуйте его в чистую функцию, которая возвращает SomeBranchItem [].

Secondary, кешируйте результат GitConnectAndFetch. Вы можете реализовать его, установив результат метода в одно частное статическое поле A и текущую временную метку во второе статическое поле B. Затем при каждом запросе вы должны сравнивать текущую временную метку и временную метку из поля B, чтобы определить, можете ли вы использовать кэшированные данные из A в качестве результата.

0 голосов
/ 08 октября 2019

Если вы не ожидаете других значений, то я просто кэширую значение ddgit и, если этот кеш существует, вернет его вместо выполнения процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...