我刚刚使用Update 2更新了Visual Studio 2015.
现在,经过几个小时的正常工作,我收到了:"检测到内存不足.此解决方案禁用完整的解决方案分析." 它出现在VS2015的编辑器底座面板的顶部.
我看到Microsoft Connect报告了一个错误.
笔记:
如果有人有解决方法或提示如何解决这个问题,请告诉我.
更新:我和Anders Forsgren(第一条评论)的感受非常相似.这听起来对我的情况有了很好的总结.
更新2(2016-04-20)我最近(3天前)彻底清理了我的Framework.Net安装包(来自"程序和功能"),我删除了大约20-30个包.有些人是俄语.我还重新安装了Visual Studio和ReSharper.所有这些似乎都为我的环境增加了一些稳定性(更少或不再冻结 - >时间会证明).此外,最近推出了一个新的(2016-04-19).NET Framework修复工具版本.也许它可以帮助解决我们的一些问题,如果有任何相关的?
更新3经过一些测试并阅读一些人的文字.它似乎与.Net框架本身或Resharper无关.它似乎与VS2015本身有关,可能与Roslyn有关.我没有成功从VS2015中删除Roslyn/CodeAnalysis,它似乎是一个必不可少的部分.听起来我们将不得不等待Microsoft修复以获得稳定的环境.
更新4(2016-04-26)请参阅John Atwood的回答.很多信息.我刚开始测试它的答案.更新3应解决此问题(如果可用???).
更新5(2016-04-26 + 6小时)在VS自身完成1次重启后,一次令人难以置信的缓慢以及一条消息"内存不足......",我可以确认禁用完整解决方案分析无法解决问题,至少在我的机器上.我目前不知道任何适用于我的机器的修复/解决方法.
更新6(2016-06-15) Mladen Mihajlovic叫醒了我.我刚刚意识到我忘了告诉VS2015 Update 3 RC的可用性(请注意我认为它是第二个版本:Update 3 RC2).它自6月7日起在MSDN上可用,RC1 = 14.0.25401.00,而RC2 = 14.0.25402.00.听起来更稳定(我强烈推荐).
According to MSDN documentation and Stephen Toub answer, my C# app should use every Logical Processor of every Processor Group because it is configured as required (see my App.config below).
I run my app on a windows server 2012 with a NUMA architecture: 2 x [cpu Xeon E5-2697 v3 at 14 cores each with Hyper Thread activated] => 2 x 14 x 2 = 56 Logical Processors.
My app start 80 threads either from "Thread Class" or "Parallel.For" and …
使用Update 2在Visual Studio 2015中加载项目(在VS启动或手动加载时自动加载),我收到错误消息:"Scc显示信息包未正确加载".
ActivityLog具有:
<entry>
<record>541</record>
<time>2016/04/01 13:43:26.048</time>
<type>Error</type>
<source>VisualStudio</source>
<description>SetSite failed for package [Scc Display Information][An item with the same key has already been added.]:{ at Microsoft.VisualStudio.Services.VsTask.InternalGetResult(Boolean ignoreUIThreadCheck)
 at Microsoft.VisualStudio.Services.VsTask.GetResult()}</description>
<guid>{D7BB9305-5804-4F92-9CFE-119F4CB0563B}</guid>
<hr>80070057 - E_INVALIDARG</hr>
<errorinfo></errorinfo>
</entry>
<entry>
<record>542</record>
<time>2016/04/01 13:43:26.050</time>
<type>Error</type>
<source>VisualStudio</source>
<description>End package load [Scc Display Information]</description>
<guid>{D7BB9305-5804-4F92-9CFE-119F4CB0563B}</guid>
<hr>80070057 - E_INVALIDARG</hr>
<errorinfo></errorinfo>
</entry>
Run Code Online (Sandbox Code Playgroud)
我在VS2015上使用Update 1安装了VS2015和更新2.我收到了错误(包...没有正确加载).
我完全卸载了VS2015.我完全重新安装了VS2015和Update 2.关于"Scc显示信息"包没有正确加载,我仍然遇到同样的问题.
更新问题似乎与我在VS2015 Update 1中遇到的问题类似.但我认为它与NuGet无关,因为我没有包含"Scc"的包.我总是将"Scc"与Visual Source Safe联系起来(它可能是相关的吗?).我怀疑问题来自注册表,但我无法弄清楚在哪里.
我尝试了Stack Overflow链接中的两个解决方案但没有成功:
我已经使用了volatile,我不确定它是否有必要.我很确定锁定在我的情况下会有点过分.阅读这个帖子(Eric Lippert评论)让我对使用volatile感到焦虑:什么时候应该在c#中使用volatile关键字?
我使用volatile是因为我的变量在多线程上下文中使用,其中可以同时访问/修改此变量,但是我可以在没有任何伤害的情况下松散添加(参见代码).
我添加"挥发性",以确保有不发生未命中对准:在另一个取可以在2通过在从另一个线程中间的写入被打破仅读取32可变的比特和其他32位.
我先前的假设(先前的陈述)是否真的可以发生?如果没有,"挥发性"使用是否仍然是必要的(选项属性修改可能在任何线程中发生).
看了2个第一个答案.我想坚持代码编写方式的事实,如果由于并发性我们错过了一个增量(想要从2个线程递增但结果仅由于并发而增加1)并不重要变量'_actualVersion'递增.
作为参考,这是我正在使用它的代码的一部分.仅在应用程序空闲时报告保存操作(写入磁盘).
public abstract class OptionsBase : NotifyPropertyChangedBase
{
private string _path;
volatile private int _savedVersion = 0;
volatile private int _actualVersion = 0;
// ******************************************************************
void OptionsBase_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
_actualVersion++;
Application.Current.Dispatcher.BeginInvoke(new Action(InternalSave), DispatcherPriority.ApplicationIdle);
}
// ******************************************************************
private void InternalSave()
{
if (_actualVersion != _savedVersion)
{
_savedVersion = _actualVersion;
Save();
}
}
// ******************************************************************
/// <summary>
/// Save Options
/// </summary>
private void Save()
{
using (XmlTextWriter writer = new XmlTextWriter(_path, null)) …Run Code Online (Sandbox Code Playgroud) 一个简单的;-)
我宣布:
xmlns:om="clr-namespace:System.Collections.ObjectModel;assembly=System"
Run Code Online (Sandbox Code Playgroud)
我尝试将泛型设置为DataType:
<DataGrid d:DataContext="{
d:DesignInstance Type=om:ObservableCollection<System:Int32>}" />
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:"类型的格式无效".
任何人都知道我该怎么做?
我想创建一个上下文菜单,其中一个menuItem将是一个子菜单,可以在枚举值中进行选择.
我不想将我的枚举中的任何值硬编码到xaml中,因为我希望任何枚举值更改都可以自动反映在UI中而无需任何干预.
我希望我的菜单是一个没有任何工件的常规上下文菜单(我的意思是外观应该是一个常规的ContextMenu).
我尝试了许多方法但没有成功.我的每个试验总是错过一些东西,但主要是看起来主要的缺失部分是转换器参数,可以绑定到某些东西.
我红了:
这是我的许多试验和相关代码:
<Window x:Class="WpfContextMenuWithEnum.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpfContextMenuWithEnum="clr-namespace:WpfContextMenuWithEnum"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:converter="clr-namespace:WpfContextMenuWithEnum.Converter"
Title="MainWindow" Height="350" Width="525"
Name="MyWindow">
<Window.DataContext>
<wpfContextMenuWithEnum:MainWindowModel></wpfContextMenuWithEnum:MainWindowModel>
</Window.DataContext>
<Window.Resources>
<ObjectDataProvider x:Key="EnumChoiceProvider" MethodName="GetValues" ObjectType="{x:Type system:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="wpfContextMenuWithEnum:EnumChoice"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<converter:EnumToBooleanConverter x:Key="EnumToBooleanConverter"></converter:EnumToBooleanConverter>
<converter:MultiBind2ValueComparerConverter x:Key="MultiBind2ValueComparerConverter"></converter:MultiBind2ValueComparerConverter>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBox Text="Right click me">
<TextBox.ContextMenu>
<ContextMenu ItemsSource="{Binding Source={StaticResource EnumChoiceProvider}}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem IsCheckable="True" Header="{Binding Path=.}">
<MenuItem.IsChecked>
<MultiBinding Converter="{StaticResource MultiBind2ValueComparerConverter}">
<Binding Path="DataContext.ModelEnumChoice" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" />
<Binding Path="." Mode="OneWay"></Binding>
</MultiBinding>
</MenuItem.IsChecked>
</MenuItem>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</TextBox.ContextMenu> …Run Code Online (Sandbox Code Playgroud) 从 C# 8.0 开始,默认情况下标准是不可为 null 的变量。参考1
但对于像这样的泛型:
public static T PerfomIO<T>(Func<T> function, T defaultValue = default)
{
try
{
return function();
}
catch (IOException)
{
}
return defaultValue;
}
Run Code Online (Sandbox Code Playgroud)
如何摆脱当我尝试传递“default”时出现的编译错误“CS8601可能的空引用分配”?
我想在这里支持空值。我不想禁用错误消息。我想按照应有的方式对其进行编程。
我尝试以多种方式添加 Nullable 但没有成功。我尝试 [AllowNull] 但没有成功
根据我对MVVM的理解,直接在ViewModel中处理路由命令是一种很好的做法.
当路由命令在ViewModel中定义为RelayCommand(或DelegateCommand)时,很容易直接绑定到命令,如下所示:Command = {Binding MyViewModelDefinedCommand}.
实际上,对于在我的ViewModel之外定义的路由命令,我在View后面的代码中处理这些命令并将调用转发到ViewModel.但我发现我必须这样做很尴尬.它违背了推荐的MVVM良好做法.我认为应该有一种更优雅的方式来实现这项工作.
如何直接在ViewModel中处理"System.Windows.Input.ApplicationCommands"或在Viewmodel外部定义的任何路由命令.换句话说,对于在ViewModel之外定义的命令,我如何直接处理ViewBodel的CommandBinding回调"CommandExecute"和/或"CommandCanExecute"?这有可能吗?如果有,怎么样?如果不是,为什么?
在我的机器上,Windows 7 - Enterprise 1 x Intel Xeon E5-1660 0 @ 3.30Ghz(激活超线程的6核/ CPU),Environment.ProcessorCount返回12,这是准确的.
在具有2 x Intel Xeon E5-2697 v3 @ 2.60GHz的Windows Server 2012上(启动了超线程的14核/ CPU(我认为因为任务管理器显示:2个插槽,28个核心,56个逻辑处理器)),Environment.ProcessorCount返回因为2x14x2 = 56,我们认为这是错误的.
为什么在Windows Server 2012 c#方法Environment.ProcessorCount没有返回正确数量的逻辑处理器?
作为附加信息,环境变量如下:NUMBER_OF_PROCESSORS = 28

更新2015-05-26:
在我的另一个问题中有更多关于此相关错误的详细信息/原因:无法在C#应用程序中为我的线程使用多个处理器组.主要是我认为C#只使用一个处理器组.有什么问题,在我们的服务器上,有2个处理器组,尽管只有56个逻辑处理器.但是这个惠普客户咨询解释了为什么我们的服务器BIOS配置导致错误的窗口.
c# ×8
wpf ×2
.net ×1
command ×1
core ×1
cpu ×1
data-binding ×1
datacontext ×1
default ×1
dispatcher ×1
enums ×1
generics ×1
load ×1
memory ×1
menuitem ×1
mvvm ×1
nullable ×1
package ×1
parameters ×1
performance ×1
server ×1
volatile ×1
xaml ×1