为啥Visual Studio这么垃圾?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥Visual Studio这么垃圾?相关的知识,希望对你有一定的参考价值。
参考技术A Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。Visual Studio是目前最流行的Windows平台应用程序的集成开发环境。 参考技术B 先问是不是,再问为什么!
VS不垃圾,相反,这是宇宙最强IDE。 参考技术C 不能再昨。?鱼非鱼电话也很容易好的呀都很大 参考技术D 一升级到最新版,微软会优化性能(废话)
二升级电脑硬件配置,当然是越高配置越好(也是废话)
三更改工具窗口设置以改善启动时间
通过在菜单栏上选择“帮助” > “管理 Visual Studio 性能”,打开“管理 Visual Studio 性能”对话框。
如果某个工具窗口使 Visual Studio 启动变慢,此工具窗口将显示在“工具窗口” > “启动”下的“管理 Visual Studio 性能”对话框中。
选择想要更改其行为的工具窗口。
选择下列三个选项的其中一个:
使用默认行为:?工具窗口默认行为。?选中此项将不会提升启动性能。
启动时不显示窗口:?打开 Visual Studio 时,指定的工具窗口将始终关闭,即使它在上一个会话中保留打开状态。?需要时可以从相应的菜单中打开工具窗口。
启动时自动隐藏窗口:?如果工具窗口在上一个会话中保留打开状态,则此选项将在启动时折叠工具窗口组,以避免初始化工具窗口。?如果经常使用工具窗口,那么这是一个不错的选择。?因为工具窗口仍然可用,但不会再对 Visual Studio 启动时间产生负面影响。
Visual Studio 2017 的某些早期版本中提供一种名为“轻型解决方案加载”的功能。?在当前版本中,包含托管代码的大型解决方案的加载速度比以前快许多,即使在不具备轻型解决方案加载功能的情况下亦如此。
四打开已筛选的解决方案
直接从“打开项目”对话框或通过命令行打开解决方案时,可以不加载任何项目。
若要使用“打开项目”对话框打开一个解决方案而不加载它的任何项目,请执行以下操作:
在菜单栏上,依次选择“文件” > “打开” > “项目/解决方案”。
在“打开项目”对话框中,选择解决方案,然后选择“不加载项目”。
解决方案打开,其中已卸载其所有项目。
在“解决方案资源管理器”中,选择要加载的项目(按住 Ctrl 同时单击以选择多个项目),然后右键单击项目并选择“重新加载项目”。
Visual Studio 将记住下次在本地打开解决方案时要加载的项目
Visual Studio 会自动重新打开上一个会话中处于打开状态的文档。?这可将加载解决方案所需的时间延长 30% 或更多,具体取决于项目类型和打开的文档。?Windows 窗体和 XAML 等设计器以及一些 javascript 和 typescript 文件的打开速度较慢。
当自动文档还原导致解决方案加载速度明显变慢时,Visual Studio 会以黄色显示栏通知。可按照以下步骤禁用自动文件重新打开:
选择“工具” > “选项”,打开“选项”对话框。
在“项目和解决方案” > “常规”页面上,取消选中“重新打开解决方案加载文档”。
如果禁止自动还原文件,可使用任一转到命令快速导航到要打开的文件:
对于常规“转到”功能,请选择“编辑” > 转到” > 转到所有”(或按 Ctrl T)。
使用“转到最近使用的文件”,查看解决方案中最近访问的文件的列表。?选择“编辑” > “转到” > “转到最近使用的文件”(或按 Ctrl 1、Ctrl R)。
最简单的优化是启用“仅我的代码” 功能,启用此功能后只会加载你项目的符号。?启用此功能后,调试托管的应用程序 (.NET) 时可节省大量内存。?对于某些项目类型,此选项默认为启用状态。
要启用“仅我的代码”,请选择“工具” > “选项” > “调试” > “常规”,然后选择“启用仅我的代码”。
对于本机调试,加载符号文件 (.pdb) 会占用很多内存资源。?可通过配置调试程序符号设置来节省内存。?通常情况下,将解决方案配置为仅加载你项目中的模块。
要指定符号加载,请选择“工具” > “选项” > “调试” > “符号”。
将选项设置为“仅指定模块”,而不是“所有模块”,然后指定要加载的负载。?调试时,还可以在“模块”窗口中右键单击特定模块,将其显示包含在系统加载中。?(要在调试时打开窗口,请选择“调试” > “窗口” > “模块”。)
有关详细信息,请参阅了解符号文件。
建议在使用 CPU 分析后将其禁用。?此功能可能会占用大量资源。?CPU 分析处于启用状态后,后续调试会话中会一直保持启用状态,因此可在其完成时将其显示关闭。如果不需要提供的功能,可以通过在调试时禁用诊断工具节省一些资源。
要禁用“诊断工具”,请启动一个调试会话,选择“工具” > “选项” > “启用诊断工具”,并取消选择该选项。
有关详细信息,请参阅分析工具。
如果经常在调试会话期间遇到内存不足的情况,可以通过更改一项或多项配置来优化性能。
某些工具或扩展会关闭以提高性能。
通常可以通过一次关闭一个扩展并重新检查性能来隔离性能问题。
托管的语言服务 (Roslyn)
有关 .NET Compiler Platform(“Roslyn”)性能注意事项的详细信息,请参阅?Performance considerations for large solutions(大型解决方案的性能注意事项)。
Visual Studio 对整个解决方案执行分析,以在调用生成前提供关于错误的丰富体验。?此功能可用于尽快速识别错误。?但是,对于大型解决方案,这一功能可能会占用大量内存资源。?如果遇到内存不足或类似问题,可以禁用此体验并释放这些资源。?默认情况下,Visual Basic 启用此选项,而 C# 禁用此选项。
若要禁用“完整解决方案分析”,请选择“工具” > “选项” > “文本编辑器”,替换选择“Visual Basic”或“C#”。?选择“高级”,并取消选中“启用完整解决方案分析”。
Visual Studio 对显示的每个方法执行“查找所有引用”任务。?CodeLens 提供内联显示引用数目等功能。?工作在单独的进程(例如 ServiceHub.RoslynCodeAnalysisService32)中执行。?在大型解决方案或资源受限的系统中,此功能对性能有显著影响。?例如,如果在 4 GB 计算机上加载大型解决方案时遇到内存问题,或进程的 CPU 使用率过高,可禁用 CodeLens 以释放资源。
要禁用 CodeLens,请选择“工具” > “选项” > “文本编辑器” > “所有语言” > “CodeLens”,然后取消选择该功能。
CodeLens 在 Visual Studio Professional 和 Enterprise 版本中提供。
若要禁用扩展,请转到“扩展”>“管理扩展”,然后禁用特定扩展。
默认情况下,XAML 设计器处于启用状态,但是只会在打开 .xaml 文件时占用资源。?如果使用 XAML 文件,但不希望使用设计器功能,请禁用此功能以释放内存。
要禁用 XAML 设计器,请转到“工具” > “选项” > “XAML 设计器” > “启用 XAML 设计器”,然后取消选择该选项。
可以使用 Visual Studio 安装程序删除不再使用的工作负载。?此操作可以跳过不再使用的包和程序集,从而优化启动和运行时的资源占用。
CLR 使用垃圾回收内存管理系统。?在此系统中,内存有时会被不再需要的对象占用。?这一状态是临时的,垃圾回收器会基于其性能和资源使用情况试探法释放此内存。?可通过在 Visual Studio 中使用热键强制 CLR 回收任何未使用的内存。?如果有大量垃圾等待回收并已强制垃圾回收,可在“任务管理器”中看到 devenv.exe 进程的内存使用率降低。?很少需要使用此方法。但是,在完成一个资源占用较高的操作(如完整生成、调试会话或解决方案打开事件)后,此方法有助于确定进程实际在使用的内存量。?由于 Visual Studio 属于混合型(托管和本机),因此本机分配器和垃圾回收器有时可能会竞争有限的内存资源。?在内存使用率较高的情况下,这可能有助于强制垃圾回收器运行。
要强制垃圾回收,请使用热键:Ctrl Alt Shift F12,Ctrl Alt Shift F12(按两次)。
如果强制垃圾回收确实可让方案正常工作,请通过 Visual Studio 反馈工具提交报告,因为这一行为可能是一个 Bug。
为啥垃圾回收这么慢?
【中文标题】为啥垃圾回收这么慢?【英文标题】:Why is Garbage Collection so Slow?为什么垃圾回收这么慢? 【发布时间】:2015-12-20 06:04:01 【问题描述】:使用 %prun 在 IPython 中分析我的代码,我注意到大部分函数时间都用于垃圾收集(0.334 秒对 0.428 总时间)。
79254 function calls (77408 primitive calls) in 0.428 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
5 0.334 0.067 0.334 0.067 gc.collect
15757 0.005 0.000 0.007 0.000 isinstance
1584 0.002 0.000 0.004 0.000 dtypes.py:68(is_dtype)
我尝试在调用函数之前和返回其值之后禁用/启用垃圾收集,但时间几乎相同。
import gc
gc.disable()
x = foo()
gc.disable()
有谁知道为什么这是一个瓶颈以及如何加快速度?
我的 Python/Pandas 版本如下:
Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:57:58)
Pandas 0.17.1
【问题讨论】:
我猜你的代码会产生很多垃圾。 我猜答案是“不”,但你能在这里分享任何代码吗?否则,也许你可以写一些东西来证明这个 gc 问题。 :s @AndyHayden 我还在分析。看起来瓶颈是一个运行大量回归的函数。如果我能整理出 MVE,我会编辑我的帖子。 另一个想法是覆盖gc.collect = lambda: None
(然后放回去!)。也许更深层次的东西是启用 gc 和手动收集。不知道这是否真的有效,但值得一试。
@stefan 不,它已从我的优先事项中删除。实际上我可能很快会再次访问它,所以如果有任何更新,我会提供更新。
【参考方案1】:
垃圾收集是许多现代语言的高级功能/抽象。它使程序变慢,但也使程序更不容易出错并且更容易创建。
这里有一些关于这个特定主题的好文章:
Python GarbageOnly slow if you use it wrong
【讨论】:
嘿,在 GC 部分只有慢说TODO: find out what he meant somehow
【参考方案2】:
您禁用了gc
,因此实际上可能有一些东西明确地调用了gc.collect
。你可以通过在 IPython 中使用这个技巧找到罪魁祸首:
import gc
import traceback
old_collect = gc.collect
def new_collect(*args, **kwargs):
traceback.print_stack()
old_collect(*args, **kwargs)
gc.collect = new_collect
请注意,它仅在代码执行 import gc
时才有效,它不适用于 from gc import collect
(我们正在操作 gc 模块)。
如果发现问题,请报告错误。
【讨论】:
以上是关于为啥Visual Studio这么垃圾?的主要内容,如果未能解决你的问题,请参考以下文章
visual studio 2008的ISO文件有3.70GB,为啥有这么大?
为啥visualstudio2008中文版.iso这个文件这么大呢?
Visual Studio 2015 社区版在线安装为啥这么慢