草庐IT

信号分配

全部标签

c# - 双问号 ('??' ) 与分配相同 var 时的对比

引用以下SEanswer.写作时A=A??B;和一样if(null!=A)A=A;elseA=B;那是什么意思if(null==A)A=B;在性能方面会是首选吗?或者当同一对象处于??表示法时,我可以假设编译器优化了代码吗? 最佳答案 不用担心性能,它可以忽略不计。如果您对此感到好奇,请编写一些代码使用Stopwatch测试性能并查看。不过,我怀疑您需要进行几百万次迭代才能开始看到差异。您也永远不能假设事物的实现,它们将来可能会发生变化-使您的假设无效。我的假设是性能差异可能非常非常小。我个人会选择空合并运算符以提高可读性,它很好,

c# - 如何检查信号量的状态

我想检查Semaphore的状态,看看它是否发出信号(所以如果t发出信号,我可以释放它)。我怎样才能做到这一点?编辑1:我有两个线程,一个等待信号量,另一个应该释放一个信号量。问题是当第一个线程没有等待时,第二个线程可能会多次调用Release()。因此,第二个线程应该检测到它是否调用Release()是否会产生任何错误(如果您尝试释放一个信号量而没有人在等待它,它会产生一个错误)。我怎样才能做到这一点?我知道我可以使用旗帜来做到这一点,但它很难看。有没有更好的办法? 最佳答案 您可以通过调用WaitOne并将超时值0作为参数传递来

c# - 声明、实例化、初始化和分配对象的含义

从技术上讲,声明、实例化、初始化和分配对象的含义和区别是什么在C#中?我想我知道分配的含义,但我没有正式的定义。在msdn中,说“创建对象的行为称为实例化”。但是创造的意思对我来说似乎很模糊。你可以写inta;a是否被创建? 最佳答案 声明-声明一个变量意味着向程序中引入一个新变量。您定义其类型和名称。inta;//aisdeclaredInstantiate-实例化类意味着创建该类的新实例。Source.MyObjectx=newMyObject();//wearemakinganewinstanceoftheclassMyObj

c# - .NET 空闲内存使用(如何防止过度分配/释放内存给操作系统)

我目前正在开发一个网站,该网站大量使用缓存数据来避免往返。在启动时,我们得到一个“大”图(数百种不同类型的对象)。这些对象通过WCF检索并反序列化(我们使用ProtocolBuffer进行序列化)我正在使用redgate的内存分析器来调试内存问题(内存似乎不适合我们在完成初始化并最终得到这份报告后“需要多少内存”现在我们可以从这份报告中收集到的是:1).NET分配的大部分内存是空闲的(它可能在反序列化期间被正确分配,但现在它是空闲的,我希望它返回操作系统)2)内存碎片化(这很糟糕,因为每次我刷新现金时我都需要重做内存饥饿的反序列化过程,这反过来会创建大对象,由于碎片化可能会抛出OutO

c# - 超出存储分配。服务器响应为 : 4. 3.1 消息大小超过固定的最大消息大小

我正在使用SMTP客户端发送带附件的邮件。当附件大于2mb时,我收到以下错误:**“超出存储分配。服务器响应为:4.3.1消息大小超过固定的最大消息大小”。**1)我可以使用附件大小>2mb的smtpclient发送电子邮件**吗?**如果是,附件的限制是多少。2)如何修复上述错误?如果你有解决方案,请给我一个想法。 最佳答案 现代SMTP邮件服务器有一个配置变量来设置允许的最大邮件大小。这定义了邮件服务器将在单个消息中接受的最大数据量。如果您尝试发送更大的消息,服务器将拒绝它。但是,您有很多选择:压缩附件以减小其大小(例如使用zi

c# - 信号量异常 - 将指定的计数添加到信号量会导致它超过其最大计数

我已经有一段时间没有遇到这个SemaphoreFullException了。总结..我在IIS7.5上使用ASP.NETv4.0框架应用程序池(集成)托管了一个应用程序。我正在使用Windows身份验证通过域(isinrole)对我的用户进行身份验证。我看过关于此主题的所有其他线程,其中建议设置Pooling=False。我不想那样做,因为性能优势,我想继续使用池化。我正在使用EntityFramework6来查询数据库,并且我没有在用户代码中的任何位置“处理”dbcontext。看起来问题出在DbConnectionPool代码中。错误在任何给定时刻随机发生。应用程序是否正在使用并不

c# - c#什么时候在栈上分配数组?

我一直在试图弄清楚什么时候在堆栈上分配东西,但我无法弄清楚如何让数组(或者更确切地说是其中的值)在堆栈上分配;在这个例子中:publicvoidfoo(){intbar[]=newint[10];}将在堆上分配10个int结构,只有指向它们的指针会在堆栈上,对吗?如何让固定大小的数组进入堆栈?如果我使用我定义的结构怎么办?如果我想将数组大小作为参数传递给函数怎么办?据我所知,如果在调用函数时已知大小,则调用函数时在堆栈上获取任意大小的数组应该没有问题。我应该为此烦恼吗?据我所知,将这个固定大小的数组放在堆栈上会提高性能,因为没有完成堆分配。 最佳答案

c# - 为什么 'Any CPU (prefer 32-bit)' 允许我在 .NET 4.5 下分配比 x86 更多的内存?

根据许多SO答案和thiswidelycitedblogpost,为“任何CPU”构建并选择了“首选32位”选项的.NET4.5应用程序将在32位和64位系统上作为32位进程运行(与.NET4.0和更早版本不同)。换句话说,x86和AnyCPU选择了'prefer32-bit'是等价的(忽略它是否可以在ARM上运行)。但是,我的测试表明,在64位系统上,“AnyCPU更喜欢32位”应用程序(我确认它运行32位)可以分配比x86应用程序更多的内存。我编写了一个.NET4.5C#控制台应用程序,它在一个循环中分配10MB字节数组(当然保留引用)直到它遇到OutOfMemoryExcepti

c# - AutoResetEvent 和 maximumCount = 1 的信号量之间有什么区别吗?

我正在阅读以下文章:http://www.albahari.com/threading而且我无法意识到AutoResetEvent和用maximumCount=1初始化的信号量之间的区别。只是为了看看我是否做对了......这两种构造有什么区别吗?谢谢! 最佳答案 是的,肯定有区别。信号量用于限制对资源或代码块的访问。当WaitOne被调用时,线程将阻塞,直到信号量的计数可用。要进行计数,您可以调用Release。最大计数为1的信号量通常称为二进制信号量。这种性质的信号量只允许从单个线程访问资源或block代码。您可以使用二进制信号

c# - 在 C# 中预分配文件空间?

我正在创建一个下载应用程序,我希望在实际下载文件之前在硬盘驱动器上为这些文件预分配空间,因为它们可能相当大,而且没有人喜欢看到“此驱动器已满,请删除一些文件和再试一次。”因此,鉴于此,我写了这篇文章。//Quick,andverydirtySystem.IO.File.WriteAllBytes(filename,newbyte[f.Length]);至少在您下载一个数百MB或什至GB的文件并且如果不完全清除页面文件并完全杀死您的系统内存,您就会让Windows陷入狂热的狂潮之前,它是有效的。糟糕。因此,有了更多启发,我开始使用以下算法。using(FileStreamoutFile=