阻止jit编译器inline象数组的get/set这样的函数无论如何都算不上明智的选择,但实现者也有他们自己的困难——尤其是在系统架构和性能的两难选择上。微软已经表示在.net framework的后继版本中将会加入对泛型编程和模版的支持,clr在mdarray上的努力应该可以看作是对泛型技术支持的一种架构性的尝试。只有在一个完整而优雅的系统架构之上,才有可能进一步完善功能和提高性能。
至此,我们应该已经有充分的理论依据证明嵌套数组具有比多维数组更优越的性能。但还有什么比一个实际的例子更有说服力的呢?
下面的函数用于计算两个字符串的“距离”(其相似程度),其中包含了非常密集的嵌套数组操作。由于将其中的嵌套数组替换为二维数组算不上什么复杂的工作,这里就不再罗列使用二维数组的代码了:
//compute the distance of two char[] strings
public static int stringdiff(char[] str1, char[] str2) {
int cost_insert = 1, cost_delete = 1;
int cost_replace = 3, cost_match = 0;
int i, j;
int[][] matrix = new int[str1.length + 1][];
for(i = 0; i < str1.length + 1; ++ i) {