C#中使用泛型对照使用通用基础类型效率减少近一倍
C#中使用泛型对照使用通用基础类型效率减少近一倍
以下是測试结果:
CSharp class and generic TotalMilliseconds: 270772.9229
CSharp generic TotalMilliseconds: 269963.3999
CSharp normal TotalMilliseconds: 159716.9094
測试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
class Program
{
static class InsertionSort<T> where T : IComparable
{
public static void Sort(T[] a)
{
for (var i = 0 + 1; i <= a.Length - 1; i++)
{
var tmp = a[i];
int j = i; while (j > 0 && a[j - 1].CompareTo(tmp) > 0)
a[j] = a[--j]; a[j] = tmp;
}
}
} public static void CSharpInsertionSortGeneric<T>(T[] a) where T : IComparable
{
for (var i = 0 + 1; i <= a.Length - 1; i++)
{
var tmp = a[i];
int j = i; while (j > 0 && a[j - 1].CompareTo(tmp) > 0)
a[j] = a[--j]; a[j] = tmp;
}
} public static void CSharpInsertionSort(int[] a)
{
for (var i = 0 + 1; i <= a.Length - 1; i++)
{
var tmp = a[i];
int j = i; while (j > 0 && a[j - 1].CompareTo(tmp) > 0)
a[j] = a[--j]; a[j] = tmp;
}
} static void Main(string[] args)
{
DateTime start = DateTime.Now;
int[] a = new int[200000];
for (int i = 0; i < 200000; i++)
{
a[i] = 100 - i;
}
InsertionSort<int>.Sort(a);
DateTime end = DateTime.Now;
Console.WriteLine(string.Format("CSharp class and generic TotalMilliseconds: {0}", (end - start).TotalMilliseconds)); int[] a2 = new int[200000];
for (int i = 0; i < 200000; i++)
{
a2[i] = 100 - i;
}
CSharpInsertionSortGeneric(a2);
DateTime end2 = DateTime.Now;
Console.WriteLine(string.Format("CSharp generic TotalMilliseconds: {0}", (end2 - end).TotalMilliseconds)); int[] a3 = new int[200000];
for (int i = 0; i < 200000; i++)
{
a3[i] = 100 - i;
}
CSharpInsertionSort(a3);
DateTime end3 = DateTime.Now;
Console.WriteLine(string.Format("CSharp normal TotalMilliseconds: {0}", (end3 - end2).TotalMilliseconds)); //Console.WriteLine(String.Join(" ", a));
Console.ReadKey();
}
}
}
非常显然,泛型减少了效率但提高了灵活性。
可是从MSDN上https://msdn.microsoft.com/en-us/library/ms172192.aspx 看到泛型有个有长处:
Better performance. Generic collection types generally perform better for storing and manipulating value types because there is no need to box the value types.
性能非常好?非常怀疑这不是每种情况下都是性能非常好。为什么会这样?可能是执行时泛型会做很多其它的内存操作由此产生了效率的减少。
C#中使用泛型对照使用通用基础类型效率减少近一倍的更多相关文章
- Swift 4 中的泛型
作为Swift中最重要的特性之一,泛型使用起来很巧妙.很多人都不太能理解并使用泛型,特别是应用开发者.泛型最适合libraries, frameworks, and SDKs的开发.在这篇文章中,我将 ...
- Java开发知识之Java中的泛型
Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类. ...
- 玩转JavaScript OOP[0]——基础类型
前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统 ...
- 夯实Java基础系列13:深入理解Java中的泛型
目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试 ...
- Java基础之Java中的泛型
1.为什么要使用泛型 这里我们俩看一段代码; List list = new ArrayList(); list.add("CSDN_SEU_Cavin"); list.add(1 ...
- 窥探Swift之使用Web浏览器编译Swift代码以及Swift中的泛型
有的小伙伴会问:博主,没有Mac怎么学Swift语言呢,我想学Swift,但前提得买个Mac.非也,非也.如果你想了解或者初步学习Swift语言的话,你可以登录这个网站:http://swiftstu ...
- 转载:C#中的泛型
泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...
- C#中的泛型 【转】
C#中的泛型 泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确 ...
- C#中的泛型详解
泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...
随机推荐
- 关于引用iframe的一点小说明
有时候,在web页面中使用iframe,可以解决一些实际问题,比如跨域访问等……这篇文章的关键不是iframe适用于哪些场景?而是iframe间如何进行互通?所谓互通是指: 情况1:在任何一个页面中调 ...
- 洛谷——P2660 zzc 种田
P2660 zzc 种田 题目背景 可能以后 zzc就去种田了. 题目描述 田地是一个巨大的矩形,然而zzc 每次只能种一个正方形,而每种一个正方形时zzc所花的体力值是正方形的周长,种过的田不可以再 ...
- luogu P1075 质因数分解
题目描述 已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数. 输入输出格式 输入格式: 输入只有一行,包含一个正整数n. 输出格式: 输出只有一行,包含一个正整数p,即较大的那个质数. ...
- ARC 098 C - Attention
Problem Statement There are N people standing in a row from west to east. Each person is facing east ...
- 基础博弈论之——简单的博弈问题【hdu1525】【Euclid‘s Game】
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=60481118 由于今天考了一道博弈的问题,我竟什 ...
- 10.getter & setter
自定义 Person 类 class Person: NSObject { var name: String? var age: Int? } getter & setter var _nam ...
- linux-查找命令-find
1. 按文件名(目录)查找.(*代表模糊匹配) find / -name curl 在根目录查找名字是curl的文件名(目录) find / -name "*curl*" ...
- 初识交替最小二乘ALS
ALS是alternating least squares的缩写 , 意为交替最小二乘法:而ALS-WR是alternating-least-squares with weighted-λ -regu ...
- java随机生成字符串(字符随机生成类 生成随机字符组合)
原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...
- CENTOS设置MYSQL字符集
CENTOS设置MYSQL字符集 show variables like 'character_set%'; vim etc/my.cnf 修改成如下: [client] port=3306 sock ...