我们有一个Visual Studio 2017扩展,它在VS中创建一个解决方案,将数据库中的文件加载到创建的项目中然后编译它。
这需要几分钟,我想更快地完成。 我知道那里有工具,我只是不知道谷歌的确切内容。 所以我不希望有人重写我的代码(虽然一个简单的例子会很棒!)但是我可以使用的一些指导会非常有帮助。
所以这里我们有创建解决方案的方法,并负责将数据库中的文件加载到其中:
public void LoadFilesIntoVS()
{
CreateSolution();
LoadCalcFiles();
LoadTemplateFiles();
LoadAdvancedCalcFiles();
LoadOtherFilesIntoSolution();
}
四种Load XYZ 方法类似,所以我将继续使用LoadCalcFiles()的示例。
public void LoadCalcFiles()
{
CalcFilesList = new ObservableCollection<CalcFile>(BuilderService.GetAllCalcFiles());
foreach (CalcFile file in CalcFilesList)
{
LoadCalcFileIntoSolution(file);
}
}
LoadCalcFileIntoSolution:
private void LoadCalcFileIntoSolution(CalcFile file)
{
try
{
string sourcePath = BuilderService.GetCalcFileSourcePath(file.ID);
string fullName = sourcePath.Substring(sourcePath.LastIndexOf("\\") + 1);
if (!calcObjects.ContainsKey(fullName))
{
if (!File.Exists(sourcePath))
{
BuilderService.GenerateCalcFileMethod(file.ID);
}
ProjectItem calcFile = LoadAsProjectItem(sourcePath);
calcObjects.Add(fullName, file);
}
}
catch (Exception e)
{
SetErrorStatus("Problem loading CalcFile into Solution. " + e.Message);
}
}
所以是的,我听说过平行的foreach。在LoadCalcFiles中使用它会有好处吗? 另外,我可以在创建解决方案后以某种方式同时运行四个Load XYZ 方法吗?
答案 0 :(得分:0)
试试这个:
public void LoadFilesIntoVS()
{
CreateSolution();
new Thread(LoadCalcFiles). Start();
new Thread(LoadTemplateFiles). Start();
new Thread(LoadAdvancedCalcFiles).Start();
LoadOtherFilesIntoSolution();
}
答案 1 :(得分:0)
对LoadFilesIntoVS()
的最简单更改可能是:
Parallel.Invoke(
() => CreateSolution(),
() => LoadCalcFiles(),
() => LoadTemplateFiles(),
() => LoadAdvancedCalcFiles(),
() => LoadOtherFilesIntoSolution()
);
这样你保持int同步。
但是所有文件都预先使用了吗?否则,您应该考虑Lazy<CalcFile>
中的CalcFilesList
,因此首次使用时会首先加载文件。它是线程安全的,你的引导时间将接近于零。