通过网络共享处理Visual Studio项目时是否存在性能问题?

时间:2009-04-09 13:58:15

标签: visual-studio visual-studio-2008

我们在使用网络驱动器访问项目时,Visual Studio(2008,如果这很重要)锁定和减速方面存在巨大问题。通过映射驱动器打开大型网站项目可能需要几分钟,甚至单个文件的保存可能需要一分钟或更长时间。

我解雇了Wireshark并观察了流量。似乎VS要求来自网络的大量文件 - 存在大量的SMB流量。我做了一些研究,这种交通似乎源于两种情况。

  1. VS必须在其自己的进程中拥有一切以提供Intellisense。
  2. VS需要拥有所有源代码才能编译项目。
  3. 我读过的所有建议似乎归结为同样的事情:在本地工作,而不是在远程机器上工作,然后通过源代码控制将代码推送到集成服务器。

    这肯定会解决我们的问题(VS本地工作速度非常快),但如果无法在本地工作怎么办?如果项目和运行它所需的基础设施太大而且很复杂,无法在每个人的个人计算机上复制,那该怎么办?

    我们已经解决了这个问题几次,我们可以计算这些项目的唯一方法是通过映射驱动器直接访问。然而,VS的缓慢和锁定确实成为一个问题。

    一种解决方案:我们在服务器上安装了VS,并通过RDP直接在服务器上处理项目。严重。

    所以,我问:

    其他人都做了什么?您是通过网络工作,还是在本地复制项目?如果远程,您是否遇到VS性能问题。

15 个答案:

答案 0 :(得分:10)

我们在本地工作并使用SVN将所有代码保存在服务器上。

我发现VS 2008在本地工作的速度很慢,所以我不喜欢在网络共享上工作。

答案 1 :(得分:3)

使用visual studio尝试通过网络共享进行编译非常慢。重新生成智能感知数据库时,您的开始时间会很糟糕。每个编译都必须多次通过网络。链接需要永远。

如果您需要在网络上编辑输出,我建议您在本地编译并定义构建后命令以将结果复制到您的共享。

如果如你所说,你不能在当地拉取所有东西,那么我建议你的项目太大,需要分解成更易于管理的块。对于多层应用程序,按层进行分解并投资某种形式的持续集成(例如CruiseControl)以自动构建单个部分。通过这种方式,您可以在特定部分上本地工作,并从CI中为应用程序的其他部分提取预构建部分。

答案 2 :(得分:1)

使用VS通过网络共享加载项目时出现性能问题我并不感到非常惊讶。 VS(使用任何语言)不断从项目中的文件获取信息。一旦你开始通过网络加载它,你将受到底层网络连接的支配。所有滞后和访问问题将直接转换为VS,加载文件内容时出现问题。

我建议在本地复制解决方案,并使用某种形式的源代码控制来同步共享上的项目。

答案 3 :(得分:1)

如果代码太复杂而无法在每个人的机器上安装,那么请不要将它放在每个人的机器上。每个人都需要所有才能做有成效的工作吗?

答案 4 :(得分:1)

我的解决方案中有79个与我合作的项目。几十万行代码。我每天从TFS中取出源码并构建它;这是一个很多代码,但它比尝试通过网络共享更好的解决方案。

答案 5 :(得分:1)

在共享上拥有源代码的更合理的情况是当一个人拥有一台运行(数量)虚拟Windows机器的非Windows主机时。

我确实有这种情况,我的台式机(主机)正在运行Debian,而我使用VMware来运行各种虚拟Windows机器(来宾),包括一台安装了Visual Studio,以便我可以定位Windows操作系统。将源代码放在主机上的Samba共享上有以下专家:

  • 源不会重复,因此在同时处理多个虚拟机时无法混淆不同的副本。
  • 我可以完全控制我首选操作系统的来源。
  • 我可以打开和关闭任何虚拟机,或者回滚到快照,而不会有失去更改的风险。
  • 我可以在几台机器相同源构建(等),而不必在源完全测试之前提交更改(原因:我必须使用Subversion&lt ; 1.5)

此设置的问题是Visual Studio(6,7,8,9)非常缓慢。

我已经使用“relatime”挂载了分区(共享所在的分区),这适用于共享中的磁盘活动,但Visual Studio会一直占用(虚拟)网卡。 / p>

非常感谢任何解决方案。

答案 6 :(得分:0)

我每次工作时遇到类似的问题(工作=其他任何事情,然后只是复制/粘贴文件)通过网络驱动器。 ZendStudio和Eclipse出现了这个问题。

为什么不使用任何类型的源代码控制?

答案 7 :(得分:0)

在处理基于Windows的项目时,我一直在本地工作。

一旦进入unix商店(AIX iirc),开发人员就可以通过NFS挂载和通过RCS签入/签出...

答案 8 :(得分:0)

我正在将VS2005用于网络共享,并且没有任何性能问题。但是,它是一个新服务器(Windows Server 2008)。我没有VS的任何其他数据点,因为在工作中使用它对我来说相对较新。

然而,在网络共享中使用Netbeans进行以前项目的一些数据点...我的项目的本地构建时间在Vista上是2分钟,在快速双核AMD 64位机器上。对于网络共享项目,在Server 2003框中,它是20分钟。从一台在当地运行XP的古老平板电脑(1ghz,单核)构建相同的项目大约需要5分钟。有趣的是,平板电脑可以在相同的5分钟内在Server 2003机器上构建。

对于那些在网络上分享“为什么”的人。网络共享会自动备份,存档等。另外,通过这种方式,我可以非常轻松地从多台计算机上查看相同的项目,而无需担心推回存储库等等。一旦你开始拥有你的开发在设备上的东西,你可以从任何地方/任何东西到达它,你永远不会想再次进行本地存储!

答案 9 :(得分:0)

我通过网络遇到任何性能问题,但它们还不够好。

答案 10 :(得分:0)

我认为众所周知,在Windows中使用VS时,磁盘速度是主要的“缓慢”因素之一。我构建的大多数开发机器都有位于10k RPM RAID0驱动器上的项目,或至少一个10k RPM驱动器。即便如此,有时似乎很慢。我想,就在它的方式,直到VS2009 / VS2010修复它? :)

答案 11 :(得分:0)

根据我的经验,由于Intellisense,在网络共享上工作时的这种滞后是99%。禁用它,你会看到。

答案 12 :(得分:0)

禁用Intellisense确实可以加速通过UNC共享来节省和打开文件

http://blogs.msdn.com/saraford/archive/2007/12/03/did-you-know-how-to-turn-off-intellisense-by-default.aspx

但是再次,正如其他评论中所述,你也可以使用一个好的文本编辑器

答案 13 :(得分:0)

我也遇到过上述性能问题。它似乎因项目而异,但我确实找到了一种方法来加快某些项目类型的性能显着

根据this article中的建议,在网络位置上创建了一个以前无法使用的项目(打开一个文件需要几分钟),这几乎就像一个本地项目。基本要点是您需要将FULL TRUST授予网络位置:

要为位于网络上的Visual Studio Projects文件夹中的所有项目授予权限,请执行以下8个步骤:

  

打开Microsoft .NET Framework 1.1(或2.0)配置   在“控制面板”中的“管理工具”下找到。

     

展开运行时安全策略|机器,|代码组| All_Code |   LocalIntranet_Zone在右侧窗格中,单击“添加子代码”   基。

     

在随后的对话框中选择“创建新代码组”并填写   像Visual Studio Projects这样的名称。

     

(可选)提供代码组的说明。 (你会看到的   单击左侧树中的代码组时的说明,帮助您   识别您可能拥有的各种代码组。

     

在条件类型下拉列表中,选择网址

     

对于URL字段,请键入以下内容:

file://YourServer/My Documents/Visual Studio Projects/*
     

在“使用现有权限集”下,选择“FullTrust”(即,如果您   相信自己的应用程序。如果不这样做,请选择其他   权限设置或创建新权限。)

不确定为什么会这样,但它使以前无法使用的.NET 2.0项目表现得更好。

原创文章:http://imar.spaanjaars.com/364/how-do-i-allow-my-visual-studio-net-projects-to-run-from-a-network-location

答案 14 :(得分:0)

我遇到了同样的问题。我有我们的构建系统的本地副本,它需要某些驱动器号,并且也经历了缓慢。

我通过添加以下注册表项解决了这个问题:

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ DOS Devices] " R:" =" \的DosDevices \ d:\ devel的\构建 " S:" =" \的DosDevices \ d:\ devel的\ SRC"

请注意,上面的双'是.reg文件格式的一部分。使用regedit时使用单个' \'整个

我的构建时间除以3. :)

我在维基百科文章中找到了关于SUBST命令的信息。