20170828-20170903C#工作学习周总结

20170828-20170903

PS:新的一个月又开始了。时间真是快啊,可是没有时光机器。这个周做了什么呢?不多吧,但是已经开始感觉有些吃力了,虽然看上去进度不快,但是大概是由于基础比较差,一上手感觉是很难的题,不能按部就班,,想要快点成长,却总会发现有各种各样的问题还没有解决,如同小学生翻阅中学生课本一样,递归式查询新鲜知识点,要想掌握很难,发现距离正确答案越来越远,所谓多读书呢,正是把这种“不确定感”降到最低,消弱“书到用时方恨少”的窘态。

Q:

在C语言中,当我们需要某个属性的值为空时,在程序里要怎么实现?

A:

有三种解决方法:

魔鬼数字——牺牲一个值来表示,比如C语言中不同类型的变量的默认赋值,说明值是不可为空的,此时我们可以选择一个永远不会起争议的值作为空值的代表(需要注意:谨慎选择,防止起冲突)

引用类型包装——把值类型转换为引用类型,要求在堆上创建对象,但是也引出了垃圾回收问题以及不管是否被认为是空值,都要进行装箱,如果值因某种原因要进行装箱。

额外布尔值——针对想要处理的每个值类型都必须要创建一个新的类型。

为什么要有可空类型?

在数据库中是允许为空的,但是在类设计的时候,int类型是不允许为空的,你不给它赋值,它也是有默认值0的。怎么办?这与数据库的设计是有冲突的,于是,就必须使用可空类型,这也就是为什么要有可空类型的原因。


SystemInfo 的类,它提供了一些方法,可以获取以下系统信息:

CPU个数,CPU占用率
可用内存,物理内存
分区信息
进程列表,结束指定进程
根据物理地址获取 IP 地址,根据 IP 地址获取物理地址
获取网络信息
查找所有应用程序标题。。。


记录:

  1. SVN交流分享;
  2. 简易版任务管理器——进程和性能两个页面

SVN交流分享

这个不必多说了,一个托管代码的版本控制器罢了,适合多人开发环境下集中式版本控制,一台服务器,局域网内多人共享库文件,没什么特别的,与技术无关,熟能生巧,但要注意多多备份代码,前人载过的坑不一定非得自己经历了才不会再犯。关于SVN仅止于此,不用多言了。

简易版任务管理器

啊,这个真的是简易呐,做了快一个周,还是不如人意呀~先来列列需求:

V0.1 需求:简易版任务管理器——进程和性能两个页面

下午收到题目,第二天中午下班之前完成。一开始拿到这个题目的时候,还在准备SVN的讲稿,无暇顾及要这个问题到底要怎么解决才好——虽然心里清楚,这一定又要费神好久了,看着没多少的内容,肯定有着老怪在后面藏着。果然到第二天中午只做出大概框架,核心部分基本没涉及,晚上就被传授关于解决问题的方法的方法——如何解决问题?——分解。忽视了这个问题,虽然从很大程度上来讲并没有小觑这样的关键步骤——3464,于是整理思路,准备重新做,于是,第二版——

V0.2 需求:简易版任务管理器——进程和性能两个页面的部分内容

看起来没什么差,首先画了一张脑图,列出工作内容、工作量以及工作进度,发现这原来是一个大工程,要解决单是一个小问题就颇费周折,更别说是多个颇费周折非简单相加的和了,画完脑图的那一刻,觉得工作量不是一般的大,要解决的问题也不是一般的多,结论就是——赶紧一项一项去找,把题做完要紧!详细可见下图:

=======================================================================================

略见一斑。这道题呢,大的方向划分,可以分为控件的使用和功能的实现——几乎所有的问题都能大概到如此地步,跟没说一样。

控件的使用,主要就是ListView使用,要熟悉控件而且尽快会用,这个还好,不是难点,但是也会画实则不短的时间,一个常见的错误就是太过容易忽略未知错误,就算看起来很小很简单的问题,解决起来居然会花那么久,因为会出各种意想不到的状况,时间都去哪儿了?都在这。时日不多也无能为力。主要要解决的问题就是右键菜单在列标题和内容之间的不一致,列标题的右键菜单是隐藏列和显示列,那:

隐藏列要怎么实现?

C# Listview控件使用实例

同理,显示列,也即增加列。每一个字段都应该是一个属性,整个一行应该是一个进程对象,一次性全部包含进去,就算没有初始化值。

功能的实现

要说process的属性不多那都是假的,看似是件高兴的事,以为任务管理器中的那几列都能抓出来了,但是并没有,有很多属性不在其中,比如进程的描述,进程的用户名等等,不能够指望process的属性值获取到,另外一个比较头疼的问题就是

1、32位的程序不能访问64位的进程;

2、不管32还是64,都不能访问系统进程的描述和路径信息,这个很让人头疼啊

anyway,通过Windows提供的API,实现了访问路径和描述,但是那个方法到底怎么用以及参数的设置为什么是那样,一点都看不懂,做到了之辉看似会用的级别,比较大的问题是,可能这方面的代码本身用的人少,自然不常见,自然不知道为什么这样写,但不搞懂的话,调试都没有办法调,于是乎——无从下手。最终通过StackOverFlow上边的方法解决了获取系统进程路径访问被拒绝的问题,同时又出现了另外一个问题——刷新很卡。这个问题确实是由于更新ListView和调用WinApi的路径而引起的,因为我尝试了不刷新,窗体加载的同时加载进程列表,还是很慢,所以主要问题并不在控件本身,而应该是不能这么去读取路径,但是又不会其他的方法,所以想来想去,试来试去,找了很多资料,截至现在(9月3日23:47min)并没有一个合适的解决方案。

接下来要完成的工作:

学习C# 调用Windows API,不然单是调用就很痛苦了。

另:

学习了关于attribute的一些知识,就是经常被用来和properties混淆的那个,有一篇博文写的不错,抛个链接

深入浅出Attribute (上)——Attribute初体验

深入浅出Attribute (中)——Attribute本质论

中的部分没怎么看懂~没有领悟到神奇之处,有待继续研究!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章