这样重写之后将会自动调用Dispose函数,我们不需要直接调用它,因此对于快速资源解除分配最好使用Using程序块。
也可以使用Try/ Catch程序块,如:
try
{
SqlConnection con = new SqlConnection(connectionstring);
try
{
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
}
catch {}
finally
{
cmd.Dispose();
}
}
catch(){}
finally
{
con.Dispose();
}
}
接着是使用as或is比使用强制类型转换要好,也就是说如果我们想转换一个类型,应该使用as关键字而不是使用明确的类型映射。
SqlConnection con = o as SqlConnection; // Better to use this
SqlConnection con = CType(o, SqlConnection); // Not always better
在上面的语句中,如果你使用第二个转换语句,如果CType不能转换成那个类型或在o中有空值,它将会抛出错误,但在使用了as的语句中不会抛出错误,而是使转换无效。
调用函数时使用Structure
调用函数时参数少是一件好事,如果直接向函数发送一个大对象将会花大量的时间发送多个参数,此时可以为那些要发送的参数创建一个Structure,然后直接发送这个Structure。
public void Callme(argumentStruct st) // Better in performance
发送一个Structure总比发送离散对象要好。
使用一个大型组件总比使用大量的小型组件要好,大型组件中有许多命名空间,而不是大量的小型类库,微软也是这么干的,它将所有的组件都创建在mscorlib.dll中了,减少了元数据的负荷、JIT编译时间和安全检查等。
如果不是必须的最好避免使用线程。
通常情况下,使用大量的线程可能导致性能下降,因为每个线程在独立运行时会消耗大量的内存,当你需要快速处理时可以使用线程,但它会增加内存消耗。
当你创建线程时使用ThreadPool(线程池)。
避免使用ArrayList和HashTables,当你需要插入随机数据时可以使用链接数组。
如果你看到ArrayList或HashTables的内部结构,就知道它仅仅是数组的打包,无论何时向这些结构中插入对象时,它将为所有已分配量重新声明,然后手动转变它们,ArrayList是一个对象数组,HashTable是一个结构数组。
另一个奇怪的事情是,ArrayList或HashTables的区间系数是4,这意味着它无论何时需要内存时分配的内存总是4的倍数,当你需要随机插入时,LinkLists、Generic Lists和LinkedArrays比Collections对象的性能要好,当你需要添加数据和按顺序显示数据时使用Collections更好。