Hi, BeNuts!

BeNuts 程序官方博客

 

C# 中如何检查无符号长整形数是否为2的正整次方

如何检查无符号长整形数是否为2的正整次方?
刚接触这个命题的时候,简单地想了想——很简单:
第一个方案:除2法。将它一直除以2,最后得到1则标识这个数是2的正整次方,得到一个小于1的小数则不是。
后来一想,这样的算法效率肯定不敢恭维,于是就有了第一个改进版:除2法的基础上进行奇偶判定。
但后来继续挖掘信息,又一次改进了方法:进行二进制位比较,效率得到了大幅的提高。
By: uonun
On: Wednesday, February 24, 2010
At: 5:26:38 PM
Comments: 0
Hits: 18
Category: 学习笔记
 
 

[海康开发笔记]将内存片段格式化为C#类对象时需要注意对象的字段顺序

将内存片段byte[] data 格式化为结构或类实例时,结构/类的属性或字段定义顺序将影响格式化结果。
各个字段的定义顺序必须和产生原数据包时所用的结构体中各字段的定义顺序一致,否则转化出来的类实例字段值将产生逻辑错误。
By: uonun
On: Tuesday, February 23, 2010
At: 3:09:16 PM
Comments: 0
Hits: 10
Category: 学习笔记
 
 

C# WinForm 全屏

1.最大化操作必须先 FormBorderStyle.None 后 FormWindowState.Maximized,否则将无法覆盖任务栏。 
2.如果已经 FormWindowState.Maximized,则需要先设为非 FormWindowState.Maximized 的状态, 否则后面的 FormWindowState.Maximized 将不起作用,违背了“1.”的内容。
By: uonun
On: Monday, January 25, 2010
At: 1:24:40 PM
Comments: 0
Hits: 71
Category: 学习笔记
 
 

C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?

C#中查询字符串中是否包含指定字符/串,我以前一直都使用的是IndexOf来判断的。
但今天做的这次试验,给了我一个无情的打击,原来一直以来使用的方法都是不好的啊,用Contains的执行效率比IndexOf效率高多了。
By: uonun
On: Friday, January 15, 2010
At: 3:43:25 PM
Comments: 2
Hits: 162
Category: 学习笔记
 
 

[.axd]“WebForm_PostBackOptions未定义”及其他相关问题的相关解决方法

一个.NET的web项目,本来运行得非常好的,突然之间报了个WebForm_PostBackOptions未定义这么个js错误,然后导致了页面无法PostBack,很严重,很生气。

顺藤摸瓜,毕竟"WebForm_PostBackOptions"这个东西并不是我自己定义的,看样子,有点像微软的东西,于是便摸到了源代码。最后分析得出,问题是出在时间上。而代码是微软的,没道理就这么随随便便错了。于是检查了一下服务器时间,靠,2008年?整整迟了一年?OK,将服务器时间调整过来,仅这一下,页面居然就一切正常了!

根据现象猜想,这段代码应该有一个缓存的机制。在一定时间之内多次访问这个页面时,这段JS会直接使用服务器缓存。于是,当原本的缓存过期,服务器时间却又调到了很久以前,那么“愚蠢”的事情就发生了——调用时根据服务器时间判断,可以调用缓存,而缓存里却已经没有了这段JS的对象。于是乎,后面报的“WebForm_PostBackOptions未定义”这个错误就自然而然了。

总之, 这个问题的根本原因是.axd没有被正确执行。
By: uonun
On: Wednesday, November 18, 2009
At: 3:22:53 PM
Comments: 0
Hits: 191
Category: 学习笔记
 
 

C#中使用API(SHFileOperation)进行文件操作,特别说明了回收站相关参数

项目中使用了磁盘阵列柜,每秒有上百兆的数据存入磁盘,这就有了从磁盘删除文件的需求。为了满足这一需求,我做了一个用于删除过期数据的系统服务。

说来这个东西本身是很简单的,但是由于数据量的巨大价值磁盘阵列空间容量的巨大(8T,1T=1024G),在实际操作中也遇到了不少麻烦。需求很简单,遍历磁盘指定目录下的所有目录和文件,根据一个比较规则判定文件是否过期,如果过期就删除。最初的设计也很简单,三个步骤:遍历 -> 过期检测 -> 删除。有了需求和程序框架设计,于是开始实施。

在C#中,DirectoryInfo和FileInfo为我们提供了足够的方法,在程序第一次成型的时候我主要使用了下面的方法:
遍历:DirectoryInfo.GetDirectories(),DirectoryInfo.GetFiles()
删除:DirectoryInfo.Delete(),FileInfo.Delete()

本机使用时效果很好,但实际上服务器运行就出现了问题:磁盘过大,文件过多,导致执行效率极其缓慢,甚至无法遍历出文件夹和文件,删除一个文件就需要好几分钟。当然,这和磁盘I/O有关,需要在有限的I/O下提高效率。为了提高效率,改用API的方式。使用SHFileOperation来进行文件、文件夹的删除操作。代码见下:
By: uonun
On: Tuesday, July 21, 2009
At: 11:45:23 AM
Comments: 0
Hits: 265
Category: 学习笔记
 
 
当前第 1 页(共 5 页 26 条记录) 1234