为啥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 社区版在线安装为啥这么慢

为啥 Visual Studio Community 2015 RC 只有4G?比VS2013小这么多。

visual studio 2010问题修复

每次打开visual studio code都会出现这么一个小黑框,而且电脑变得巨卡,这是为啥啊