[杂记]一些感悟,随时更新

来源:互联网 发布:宫颈癌疫苗副作用 知乎 编辑:程序博客网 时间:2024/05/20 21:57

1.用程序更新数据库时间的时候,最好用在sql 语句中操作时间。比如:在sql语句中使用getdate()、dateadd()等函数。在程序中使用获取的时间字符串跟客户端运行平台的时间设置有关,可能会出现”2015-09-06 星期日 下午13:14”这样的字符串,这不能被数据库识别为有效的时间格式。

2.写在finally块中的代码一定不要出错!!!

3.一些重要的代码,尽量使用try-catch

4.WPF跟WinForm在这一点上是相同的:简单点来讲就是——刷新界面的活只能在UI线程里跑。你的问题是:你试图在另一个线成里刷新UI,这时候错误就会抛出,因为非UI线程是不能亲自刷新UI的,它们需要告诉UI线程:“我们需要你帮助把UI刷新一下”。

如果你是在.xaml.cs文件中,你可以直接调用Dispatcher.Invoke((Action)delegate { /* Your
code is put here */ });

如果你在ViewModel里,你可以Application.Current.Dispatcher.Invoke((Action)delegate { /* Your code is put here */ });
  
5. 问题事件名称: CLR20r3  ...问题签名 04: System.Data...问题签名 09: System.Data.SqlClient.Sql..
这些问题是程序在客户端运行出错的时候,程序给出的错误签名。
出现 CLR20r3的问题, 这是因为.NET Framework 1.0 和 1.1 这两个版本对许多未处理异常(例如,线程池线程中的未处理异常)提供支撑,而 Framework 2.0 版中,公共语言运行库允许线程中的多数未处理异常自然继续。在多数情况下,这意味着未处理异常会导致应用程序终止。
出现System.Data.SqlClient.Sql这些问题一般都与SQL语句出错有关。

6.如果项目中引用了其他的第三方的程序集,比如EnterpriseLibraryFCKEditor等,这时候不要简单从他们的安装位置引用,而是在你的解决方案下,添加一个Library的目录,把需要的程序集复制到这里,然后从Library目录引用.

7.默认情况下,每个对象都有自己的全部字段的副本。一个对象中的某个字段的修改不会影响到另一个对象中的同名字段。但是如果将某一字段标记为static,该字段将会被该类所有实例所共享,即此类的所有实例都访问同一内存地址。
虽然一个静态字段可以被多个对象所共享访问,但是并没有同步的机制,也就是说,如果多个线程视图同时修改该字段,那么结果将不可预料。
(那么,是否说明, 在web工程中,将参数封装在静态字段中的方法将不再可行?)

8.C#中类型转换的时候,使用as关键字,当类型转换失败的时候,不会引发一场,只会生成一个null变量。

9.结构不会再堆中分配内存,而是直接在栈中分配内存。因此,当涉及到在某个方法或者类内部有大量的实例运算,但是在方法或者类作用域之外不需要用到这些实例的时候,使用结构实例的效率要比使用类实例要高。
但是,如果当实例是作为参数列表传递的时候,使用结构实例的效率要比使用类实例的效率低得多。
因为,在默认情况下,C#的参数传递是通过值传递的。每个值类型参数都会被创建一个副本(引用类型参数只传递引用地址),而被调用函数所使用的只是这些副本。大型值类型(比如自定义结构)作为参数传递的时候,通过参数传递会牺牲一些性能,因为在创建副本的时候会导致开销大增,特别是在方法调用频繁的时候。

1 0
原创粉丝点击