草庐IT

c# - 为什么 .NET 结构应该小于 16 个字节?

现在我在一些地方读到结构的最大实例大小应该是16个字节。但我看不到数字(16)从何而来。在网上浏览时,我发现有些人认为这是获得良好性能的近似数字,但Microsoft说这是一个硬性上限。(例如MSDN)对于为什么是16个字节,有没有人给出明确的答案? 最佳答案 这只是一个性能经验法则。要点在于,因为值类型是按值传递的,所以如果将结构传递给函数,则必须复制整个结构的大小,而对于引用类型,只需复制引用(4个字节).一个结构可能会节省一些时间,因为你删除了一个间接层,所以即使它大于这4个字节,它仍然可能比传递引用更有效。但在某些时候,它变

c# - 为什么.net 对字符串使用 UTF16 编码,而保存文件却默认使用 UTF-8?

FromhereEssentially,stringusestheUTF-16characterencodingform但是当保存vsStreamWriter时:ThisconstructorcreatesaStreamWriterwithUTF-8encodingwithoutaByte-OrderMark(BOM),我看过这个示例(已删除损坏的链接):看起来utf8对于某些字符串来说更小,而utf-16在其他一些字符串中更小。那么,为什么.net使用utf16作为字符串的默认编码,而使用utf8来保存文件?谢谢。附注我已经读过thefamousarticle

c# - 我应该在 C# 中使用 uint 来表示不能为负的值吗?

我刚刚尝试实现一个类,其中许多长度/计数属性等都是uint而不是int。然而,在这样做的过程中,我注意到这样做实际上很痛苦,就好像没有人真的想那样做一样。几乎所有提供整数类型的东西都会返回一个int,因此需要在几个点上进行强制转换。我想构造一个StringBuffer,其缓冲区长度默认为该类中的字段之一。也需要类型转换。所以我想知道我是否应该在这里恢复为int。无论如何,我当然不会使用整个范围。我只是想因为我在那里处理的事情不能是负数(如果是,那将是一个错误)实际使用uint是个好主意。附言:我看到了thisquestion这至少解释了为什么框架本身总是使用int但即使在自己的代码中,

c# - 通过强制转换为 uint 而不是检查负值来执行范围检查是否更有效?

我在.NET的Listsourcecode中偶然发现了这段代码://Followingtrickcanreducetherangecheckbyoneif((uint)index>=(uint)_size){ThrowHelper.ThrowArgumentOutOfRangeException();}显然这比if(index=_size)更有效(?)我很好奇这个把戏背后的原理。单个分支指令真的比两次转换到uint更昂贵吗??或者是否有其他一些优化可以使这段代码比额外的数字比较更快?解决房间里的大象问题:是的,这是微优化,不,我不打算在我的代码中到处使用它——我只是好奇;)

c# - .NET 内存不足异常 - 使用 1.3GB 但安装了 16GB

当应用程序的内存使用量超过1.3GB时,我的C#应用程序出现内存不足异常。我在一台内存为3GB的32位机器上遇到了同样的问题,这在当时是有道理的。但是现在我把硬件升级到64位机器,16GB内存,使用高端主板和高端RAM,但是1.3GB后还是出现OutOfMemory异常!我知道没有超过2GB的单个对象,无论如何1.3小于2GB,所以MS内置的单个对象2GB限制不太可能是问题。当应用程序达到特定内存使用阈值时,似乎有某种Windows终止开关。然后应该有一种方法来配置它。它可能在注册表中吗?任何帮助将不胜感激! 最佳答案 除非您编译到

c# - 为什么 Array.Length 是一个 int,而不是一个 uint

这个问题在这里已经有了答案:Whydoes.NETuseintinsteadofuintincertainclasses?(7个答案)关闭9年前。为什么Array.Length是int,而不是uint。这让我很困扰(有点),因为长度值永远不会是负数。这也迫使我在自己的类中使用int作为长度属性,因为当你指定一个int值,这需要显式转换...所以最终的问题是:unsignedint(uint)有什么用吗?甚至微软似乎也不使用它们。

c# - 如何在 C# 中将 uint 转换为 int?

如何在C#中将uint转换为int? 最佳答案 给定:uintn=3;inti=checked((int)n);//throwsOverflowExceptionifn>Int32.MaxValueinti=unchecked((int)n);//convertsthebitsonly//iwillbenegativeifn>Int32.MaxValueinti=(int)n;//samebehaviorasunchecked或inti=Convert.ToInt32(n);//samebehavioraschecked--编辑包含

c# - int、Int16、Int32 和 Int64 之间有什么区别?

int、System.Int16、System.Int32和System.Int64有什么区别比他们的大小? 最佳答案 每种类型的整数都有不同的存储容量范围TypeCapacityInt16--(-32,768to+32,767)Int32--(-2,147,483,648to+2,147,483,647)Int64--(-9,223,372,036,854,775,808to+9,223,372,036,854,775,807)正如JamesSutherland在hisanswer中所述:intandInt32areindeeds

【C#教程16/16】: 输入输出

一、提要    本文专门介绍C#中的输入和输出。C#中的输入和输出基于流。文件流、文件建立修改等属性操作,文件目录操作等。二、C#input和output2.1C#流        流是字节序列的抽象,例如文件、输入/输出设备、进程间通信管道或TCP/IP套接字。流将数据从一个点传输到另一个点。流也能够操纵数据;例如,他们可以压缩或加密数据。在.NETFramework中,System.IO命名空间包含能够读取和写入数据流和文件的类型。        C#在File类中为I/O操作提供高级方法,在StreamReader或StreamWriter等类中提供低级方法。2.2处理异常(except

JAVA中2进制与16进制表示

Java学习中二进制与16进制表示表示二进制时需要在前缀前+0b或者0B(0b10)表示16进制时,需要在前缀前+0x或者0X(0x100)特殊技巧:可以使用16进制表示浮点型小数。比如0.125=2^-3,可以表示为doublea=0x1.0p-3;这里p是表示指数,其中前面的尾数采用的是16进制,后面的指数采用的是10进制。指数的基数是2,不是10比如doublea=0x10.0p-3;a是等于2尾数0x10=16,指数0p-3是2的-3次方a=16*(2^-3)=2