Tag: .net 4.5

为什么’任何CPU(更喜欢32位)’允许我在.NET 4.5下分配比x86更多的内存?

根据许多SO答案和这篇被广泛引用的博客文章 ,为“任何CPU”构建的.NET 4.5应用程序选择了“首选32位”选项,将在32位和64位上作为32位进程运行系统(与.NET 4.0及更早版本不同)。 换句话说,选择’prefer 32-bit’的x86和AnyCPU是等效的(忽略它是否可以在ARM上运行)。 但是,我的测试表明,在64位系统上,“AnyCPU更喜欢32位”应用程序(我确认运行32位)可以分配比x86更多的内存。 我编写了一个.NET 4.5 C#控制台应用程序,它在循环中分配10MB字节数组(当然保留引用)直到它遇到OutOfMemoryException,并在具有大量RAM的64位系统上运行它。 当构建为x86时,它的分配大约为1.2GB。 构建为“任何CPU(更喜欢32位)”的相同代码最高可达1.5GB。 为什么不同?

如何使用System.Net.HttpListener在WebSocket中启用SSL

我在Windows Azure(工作者角色)上使用.Net 4.5和HttpListener类来创建自己的WebSocket服务器。 对于HTTP非安全连接,它可以很好地工作。 问题是我需要使用SSL(wss://)保护WebSocket连接。 我一直在寻找,HttpListener类文档和互联网(即使在这里)都没有帮助我。 我发现httpcfg.exe应该帮我配置证书,但没有幸运。 那么,这是我的问题: 有没有办法从我的代码中启用它? 喜欢从商店读取证书并以某种方式在HttpListener上设置它? 如果没有,httpcfg.exe是解决方案? 如果是的话,如何使用它? 如果1 ==否和2 ==是,我如何在Azure中使用httpcfg? 谢谢! 我非常感谢帮助…… 最好的祝福… Gutemberg

条件属性如何工作?

我有一些标有[Conditional(“XXX”)]辅助方法。 目的是在仅存在XXX条件编译符号时使方法有条件地编译。 我们使用它来调试和跟踪function,它运行良好。 在我研究条件编译如何工作的过程中,我发现有几个来源说明用Conditional属性标记的方法将放在IL中,但是不会执行对方法的调用。 代码如何编译成IL而不执行? 如何validation行为实际上是如上所述? 我在IL方面做得不多,所以我的技能在这个方面都很弱。

System.Security.Claims命名空间的成员不可用?

我正在学习.NET 4.5中新的基于声明的身份validation方法,并且正在使用Console应用程序来实现这一点。 根据MSDN,ClaimsAuthenticationManager是System.Security.Claims命名空间的成员。 正如你在这里看到的,我没有得到这个选项。 我确定该项目使用的是.NET 4.5。 我在这里想念一些简单的东西……有人有什么建议吗?

将证书注册到SSL端口

我有一个Windows服务(作为LocalSystem运行),它自我托管OWIN服务(SignalR),需要通过SSL访问。 我可以在我的本地开发机器上设置SSL绑定 – 我可以在同一台机器上通过SSL访问我的服务。 但是,当我去另一台机器并尝试运行以下命令时,我收到一个错误: 命令: netsh http add sslcert ipport=0.0.0.0:9389 appid={…guid here…} certhash=…cert hash here… 错误: SSL证书添加失败,错误:1312 指定的登录会话不存在。 它可能已被终止。 我使用的证书是完全签名的证书(不是开发证书),可以在我的本地开发框中使用。 这就是我在做的事情: Windows服务启动并使用以下代码注册我的证书: var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadWrite); var path = AppDomain.CurrentDomain.BaseDirectory; var cert = new X509Certificate2(path + @”\mycert.cer”); var existingCert = store.Certificates.Find(X509FindType.FindByThumbprint, cert.Thumbprint, false); if (existingCert.Count == 0) store.Add(cert); store.Close(); 然后我尝试使用netsh和以下代码将证书绑定到端口9389: var […]

易失性字段:如何实际获取字段的最新写入值?

考虑以下示例: private int sharedState = 0; private void FirstThread() { Volatile.Write(ref sharedState, 1); } private void SecondThread() { int sharedStateSnapshot = Volatile.Read(ref sharedState); Console.WriteLine(sharedStateSnapshot); } 直到最近,我的印象是,只要FirstThread()确实在SecondThread()之前执行,该程序就无法输出除1之外的任何内容。 但是,我现在的理解是: Volatile.Write()发出一个发布栏。 这意味着在将1分配给sharedState之后,可能不会发生先前的加载或存储(按程序顺序)。 Volatile.Read()发出一个获取围栏。 这意味着在将sharedState复制到sharedStateSnapshot之前不会发生后续加载或存储(按程序顺序)。 或者,换句话说: 当sharedState实际发布到所有处理器核心时,该写入之前的所有内容也将被释放,并且, 获取地址sharedStateSnapshot的值时; 必须已经获得了sharedState 。 如果我的理解是正确的,那么如果FirstThread()的写入尚未被释放,则没有什么可以阻止获取sharedState是“陈旧的”。 如果这是真的,我们怎样才能真正确保(假设最弱的处理器内存模型,如ARM或Alpha),程序将始终打印1 ? (或者我在某个地方的心理模型中犯了错误?)

在循环图中使用ThreadLocal 时内存泄漏

我刚刚遇到了垃圾收集器关于System.Threading.ThreadLocal这种奇怪的“行为”,我无法解释。 在正常情况下, ThreadLocal实例在超出范围时将被垃圾收集,即使它们没有正确处理,除非它们是循环对象图的一部分。 以下示例演示了此问题: public class Program { public class B { public AA; } public class A { public ThreadLocal LocalB; } private static List references = new List(); static void Main(string[] args) { for (var i = 0; i c.IsAlive)); } static void CreateGraph() { var a = new A { LocalB = […]

DeploymentItem在VS2010和VS2012中的表现不同

我有一个VS2010解决方案,我正在尝试升级到VS2012。 我在VS2012中遇到了MSTestunit testing的问题。 所有测试都包括测试类上的DeploymentItem属性。 [TestClass] [DeploymentItem(@”SubDir\SubDir2\models”, “models”)] public class UnitTests { … } 在2010年,它正确地从SolutionDirectory\SubDir\SubDir2\models目录中复制相关文件。 在2012年,它试图从部署测试的目录中复制SolutionDirectory\UnitTests\bin\debug\SubDir\SubDir2\models 我正在寻找一种方法来恢复旧的行为。

随机无效的视图状态错误

我知道关于这个主题有很多问题,我已经全部阅读过了。 我正在使用IIS8,.Net 4.5。 用户随机获得无效的viewstate错误,我无法弄清楚。 一旦发生这种情况,他们可以回到网站的唯一方法是清除浏览器缓存。 在我的web.config中,我有: <!—-> … 我正在虚拟专用服务器上运行,而我还没有找到大于9​​kb的视图状态。 我的应用程序池设置为每天凌晨3:00重启,每天一次。 我的页面使用更新面板,也许用户点击“返回”? 但我看到它只是访问页面而没有点击回来。 我注意到的一件事是我有3个不同的站点使用相同的应用程序池标识,但应用程序池是分开的。 machine.xml中没有机器密钥,但只在我的web.config中。

使用gcAllowVeryLargeObjects的OutOfMemoryException

我正在使用BinarySerializer,它有一个非常大的(尽管不是很深)项目图。 我有8GB的ram支持12Gig的交换,并且在序列化时我得到一个OutOfMemoryException,这是预期的(图表可能接近或超过2Gb)。 然而,当我使用gcAllowVeryLargeObjects它并没有更好,我仍然得到相同的exception,我肯定在应该保留在内存中的东西(至少与交换)。 有什么我可以做的来支持序列化这个/一种方法来获得相同的function集但是可能会得到结果吗? 我的序列化代码没有什么特别之处: public static byte[] Serialize(this object o) { var ms = new MemoryStream(); var bf = new BinaryFormatter(); bf.Serialize(ms, o); ms.Position = 0; return ms.ToArray(); } 我正在序列化的对象包含自身包含数组等的项目数组,但完整的图形本身不是“那么大”(它是索引数据的结果,在源处,已经只有大约1GB的大小)。 这也不是由于GC碎片造成的(压缩大堆没有帮助)。