【问题标题】:What could be causing design view to be so slow?是什么导致设计视图如此缓慢?
【发布时间】:2009-05-07 09:06:01
【问题描述】:

对于小型项目,我几乎可以立即切换到设计视图(

我有一个大型项目,需要大约 60 秒才能在设计视图中打开控件或表单——这只是第一次。在这 60 秒的延迟之后,我几乎可以立即在设计视图中打开项目中的任何控件 - 直到我重新编译项目。

如果这个项目构建的 exe 在另一个(小)项目中被引用,那么小项目会立即变得和大项目一样迟钝。同样,如果我将大项目中的所有文件单独添加到小项目中,小项目就会变得迟缓。

大项目引用了一个大的托管 C++ 项目,但是如果我将相同的引用(并从引用中调用一个函数以确保它已加载)添加到小项目,小项目仍然很快。

我的大型项目使用 SandDock。如果我的小项目使用 SandDock,它仍然很快。

我的大型项目有大约 60 个用户控件出现在工具箱中。如果我给小项目添加60个用户控件,小项目还是很快的。

如果我使用 [System.ComponentModel.ToolboxItem(false)] 将用户控件从工具箱中隐藏起来,那么大型项目仍然很慢。

vs2005和vs2008都出现这个问题。

是什么导致大型项目首次打开设计视图时如此缓慢?其他一些参考?大量的控件?班级人数多?其他原因?

我注意到的一件事(尽管可能是红鲱鱼)是 ProjectAssemblies 文件夹(C:\Documents and Settings\tim.gradwell\Local Settings\Application Data\Microsoft\VisualStudio\9.0\ProjectAssemblies)很大( > 1GB) 并且这里的大多数文件夹都有我的托管 C++ dll 的副本!每次重新打开设计视图(重新编译后)时,这些文件夹似乎都会重新创建。这可能与放缓有关吗?


更多信息:

用户控件或表单中的工具条使表单需要 60 秒才能加载。移除工具条(但表单上仍有其他几个不同的控件)可以立即切换到设计视图。

不过,这还不是全部……全新项目中的工具条不会导致大幅减速 - 所以在我的大项目中一定有什么东西影响了工具条。此外,某些其他没有工具条的窗体/控件仍然需要 60 秒才能显示设计视图,因此无论是什么影响工具条的东西也会影响其他控件。我将继续努力准确地确定哪些控件,甚至可能是导致它的原因!

【问题讨论】:

  • 只是为了清楚起见 - 导致减速的大型项目在 C# 中,对吗?
  • 该项目是用 C# 编写的...它还引用了托管 C++ 项目,但我没有时间尝试隔离托管 C++ 项目以查看是否有所不同...

标签: c# visual-studio winforms


【解决方案1】:

即使您已将类标记为不出现在工具箱中,Visual Studio 仍需要扫描所有打开的项目以发现这一点。为了加快速度,您需要关闭自动填充工具箱的设置。如果您使用工具箱进行大量工作,可能会有点烦人,但它会大大加快速度。

设置在工具 -> 选项 -> Windows 窗体设计器中,将“AutoToolboxPopulate”设置为 false。

【讨论】:

  • 感谢您的建议 - 但它仍然会发生,即使 AutoToolboxPopulate 设置为 false :(
  • 即使在重启和清理等之后?这很烦人。我们遇到了完全相同的情况,并且该设置很好地解决了所有问题。祝你好运!
  • 该死 - 我已经为此苦苦挣扎了一年,以为这是我的控件库。这样做了,现在设计师很光滑!谢谢@DavidWengier
  • 但是如果将Auto设置为false,如何手动添加控件?
【解决方案2】:

第一个答案:“设置在工具 -> 选项 -> Windows 窗体设计器中,将“AutoToolboxPopulate”设置为 false”对我有用。当第一次在设计视图中查看表单时,设计人员在试图将注意力集中在表单上的控件上时,通常会挂起至少一分钟。现在,只需几秒钟。 (我没有足够的声望点来直接评论那个答案)

【讨论】:

    【解决方案3】:

    除了 devenv.exe 随机挂起之外,我的 2005 也发生了同样的事情

    甚至在“构建”之后,有时自定义控件往往会破坏主窗体

    您最近是否进行过病毒扫描和碎片整理?

    【讨论】:

    • 它发生在全新的机器上(如全新安装的 Windows)。在旧机器上打开设计视图需要几分钟时间。
    【解决方案4】:

    我在 Visual Studio 2005 中的一个 Win CE 6.0 项目中遇到了这个问题。该项目使用 System.Data.SQLite.dll v1.0.65.0。每次打开或重新编译项目,然后尝试打开带有网格的表格进行设计时,至少会有 12 分钟的延迟。结果它在“My Documents\Local Settings\Application Data\Microsoft\Visual Studio\8.0\Project Assemblies”下生成了 770 多个文件夹,其中大部分只有 SQLite dll 的副本。
    问题似乎是我在项目中从“兄弟”文件夹中引用了这个 DLL 到我的项目。例如:
    项目文件夹:“...Projects\ThisAndThat\projectFolder”
    DLL 文件夹:“...Projects\ThisAndThat\projectFolderBin”
    可能还有其他文件夹关系表现出这个问题,但我没有调查。
    我将 DLL 移到“Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE”文件夹中,问题就消失了。我有一个包含两个选项卡的选项卡控件的表单。每个选项卡都包含一个数据网格控件。此表单现在几乎可以立即在设计器中加载。
    如果有人知道更好的解决方案,或者 VS2005 的什么设置或行为导致此问题,请添加评论。

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      相关资源
      最近更新 更多