vc6和c#性能比较

编了几年vc.又编了几年c#一直很好奇.这两个性能如何.

还是写个程序进行测试一下

vc6结构体

struct DataNode1{
int number; //学号
char name[10]; //姓名
char sex [4]; //性别
double maths; //高数
double Clan; //C语言
double english; //英语

};

如果给结构体数组赋值 .添加1000000个 显示到列表之中 。经过测试 。vc6显示用时 [329]秒如果采用结构体链表用时[333]秒

同样的结构体 c# 添加 添加1000000个 。 显示到列表之中 。经过测试 。 366.4559601秒

显然 vc6比较快

这是测试的c语言 的头文件

#define LEN sizeof(struct student_stu)

struct DataNode{
int number; //学号
char name[10]; //姓名
char sex [4]; //性别
double maths; //高数
double Clan; //C语言
double english; //英语
DataNode *Next;
};
struct DataNode1{
int number; //学号
char name[10]; //姓名
char sex [4]; //性别
double maths; //高数
double Clan; //C语言
double english; //英语

};

class CStudent{
public:
CStudent();
virtual ~CStudent();
void Add( DataNode & mNode); //添加
void Insert(const int index, DataNode& mNode);
void Clear();
void del(int number );
int Del_Node(DataNode* pHead,int back);
void showLinkToList(CListBox &mlist); //删除
void save(); //保存
void showLinkToList(CListCtrl &mlist);
void AddToTail ( DataNode * mNode) ;
int Length();
void visit_list();
void readFileToLink(char *strFileFullName);
//排序

void InsertSort();//插入排序
void BubbleSort();//冒泡排序
void sort(); //默认排序

//private:
DataNode* First;
DataNode* Last;
int Count;
};

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Student.cpp: implementation of the CStudent class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "data.h"
#include "Student.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CStudent::CStudent()
{
First = Last = NULL;
Count = 0;
}

CStudent::~CStudent()
{
Clear();
Count = 0;
}

void CStudent::Add( DataNode & mNode)
{
//申请新节点
/* DataNode * newNode=new DataNode();
newNode->data=str;
newNode->Next=NULL;

if(First == NULL)
{
First = newNode;
Last = First;
Count =1;
return;
}else
{

//找最后一个节点
DataNode * q = Last;
//插入到链表最后
q->Next=newNode;
Count ++;
}*/
if(Count == 0)
{
First = new DataNode;//新建立结点&mNode;
//开始赋值
First-> number =mNode.number; //学号
strcpy( First-> name,mNode.name); //姓名
strcpy(First-> sex,mNode.sex); //性别
First-> maths=mNode.maths; //高数
First-> Clan=mNode.Clan; //C语言
First-> english=mNode.english; //英语

First->Next = NULL;
Last = First;
}
else
{
if(Last != NULL)
{
while(Last->Next!=NULL)
{
Last =Last->Next;
}
}
Last->Next = NULL;
Last->Next =new DataNode;// &mNode;
Last = Last->Next;
Last-> number =mNode.number; //学号
strcpy( Last -> name,mNode.name); //姓名
strcpy( Last -> sex,mNode.sex); //性别
Last-> maths=mNode.maths; //高数
Last-> Clan=mNode.Clan; //C语言
Last-> english=mNode.english; //英语

Last->Next = NULL;

}
++Count;
}
void CStudent::AddToTail ( DataNode * mNode)
{
DataNode * p = mNode;
int itemno =0;

while(p!=NULL)
{
Add( mNode[itemno]);
p=p-> Next;
itemno++;
}

//没有判断当链表为空的时候!!
}
int CStudent::Length()
{
return Count;
}
//保存。你自己完成
void CStudent::save()
{

}
//清空
void CStudent::Clear()
{
DataNode* p = NULL;

while(First!=NULL)
{
p = First;
First=First->Next;
p->Next=NULL;
delete(p);
p = NULL;
}
Last = NULL;
First= NULL;
Count = 0;
}

//插入
void CStudent::Insert(const int index, DataNode& mNode)
{
if(index<Count-1)
{
DataNode* node = First;
for(int i=0;i<index;i++)
{
node = node->Next;
}
DataNode* tmp = new DataNode;
tmp->Next = node->Next;
node->Next = tmp;

tmp-> number =mNode.number; //学号
strcpy( tmp-> name,mNode.name); //姓名
strcpy(tmp-> sex,mNode.sex); //性别
tmp-> maths=mNode.maths; //高数
tmp-> Clan=mNode.Clan; //C语言
tmp-> english=mNode.english; //英语
}
else if(index == Count-1)
{
this->Add(mNode);
}
++Count;
}

void CStudent::del( int number)
{
if (First==NULL)return;//如果链表没有结点,就直接输出提示

DataNode *p=First; //初始化pGuard指针
DataNode *pGuard=First;
if (First->number==number)//如果头结点数据符合关键字
{
p=First;//头结点是待删除结点
First=First->Next;//先连
delete p;//后断
Last = NULL;
Count=0;
return;//结束函数运行
}
else//否则
{

while(p){
if(p->number == number){
pGuard->Next = p->Next;
free(p);
return ;
}else{
pGuard = p;
}

p = p->Next;
}
}
//若head单链表中有数据为t的结点,删除之

/* if(First== NULL)return;
DataNode *p =First ;

bool bFound =false;

DataNode *node1=First;
DataNode *node2=NULL;

if (node1->number==number)
{
First=First->Next;
delete node1 ;
Count--;
if(First== NULL)
{
// delete Last;
Last = NULL;
Count=0;
}

}
else
{
node1=node1->Next;
while (node1!=NULL)
{
node2=node1;
node2=node2->Next;
if (node2->number==number)
{
node1->Next=node2->Next;
delete node2 ;
Count--;
break;
}
node1=node1->Next;
}

}

//若head链表中没有数据域的值为number的结点,则输出删除失败的信息
if(!bFound)
{
printf("\ndelete failure!");
}*/

}

// 删除链表节点函数

int CStudent::Del_Node(DataNode* pHead,int back)
{
int i = 0;
int data;
DataNode *_node = pHead;
DataNode* pSwap;
if ((back < 1) && (NULL == _node->Next))
{
printf("删除失败!\n");
return 0;
}
while(i < back-1)
{
_node = _node->Next;
++i;
}
pSwap = _node->Next;
data = pSwap->number;
_node->Next = _node-> Next->Next;
free(pSwap);
return data;
}
//显示学号到listbox
void CStudent::showLinkToList(CListBox &mlist)
{
//输出head单链表
mlist.ResetContent();
CString str= "";

DataNode*p=Last;
while(p)
{
str = p->number ;
mlist.AddString(str ); //输出结点的数据——字符串
p=p->Next;
}
}

void CStudent::showLinkToList(CListCtrl &mlist)
{
//输出head单链表
mlist.DeleteAllItems();
CString str= "";
int item =0;
DataNode*p=First;
while(p)
{
str.Format("%d", p->number) ;
mlist.InsertItem(item,str ); //输出结点的数据——字符串
mlist.SetItemText(item,1,p->name );
mlist.SetItemText(item,2,p->sex );

str.Format ("%.1f",p->maths );//输出节点数据高数
mlist.SetItemText (item,3,str );

str.Format ("%.1f",p->Clan );//输出节点数据C语言
mlist.SetItemText (item,4,str);

str.Format ("%.1f",p->english );//输出节点数据英语
mlist.SetItemText (item,5,str );

item++;

p=p->Next;

}
}

/************************************************************************/
/* 遍历链表 */
/************************************************************************/
void CStudent::visit_list()
{
DataNode* p = First ;
while(p)
{
printf("current_addr=[%p] son_addr=[%p] son_son_addr=[%p] \n",p,p->Next,p->Next);
p=p->Next;
}
}
//把文件的内容读入到链表里面
void CStudent::readFileToLink(char *strFileFullName)
{
Clear();//清空
if(!FileExist(strFileFullName))
{
return ;
}
char strbuf[1024];
FILE *fp;
if((fp=fopen(strFileFullName,"r"))==NULL)
{
printf("File Name Error.\n");
return ;
}
int i=0;

while(!feof(fp))
{
if(fgets(strbuf,1024,fp))
{
i++;
//写个函数。把字符串转换成一个数据节点;然后把数据节点add
//Add(strbuf);

}else
{
break;
}
}
fclose(fp);
return ;
}

/*
==========================
功能:直接插入排序(由小到大)
返回:指向链表表头的指针
==========================
*/

void CStudent::InsertSort()
{
struct DataNode *first; /*为原链表剩下用于直接插入排序的节点头指针*/
struct DataNode *t; /*临时指针变量:插入节点*/
struct DataNode *p; /*临时指针变量*/
struct DataNode *q; /*临时指针变量*/

first = First->Next; /*原链表剩下用于直接插入排序的节点链表:可根据图12来理解。*/
First->Next = NULL; /*只含有一个节点的链表的有序链表:可根据图11来理解。*/

while (first != NULL) /*遍历剩下无序的链表*/
{
/*注意:这里for语句就是体现直接插入排序思想的地方*/
for (t=first, q=First; ((q!=NULL) && (q->number < t->number)); p=q, q=q->Next); /*无序节点在有序链表中找插入的位置*/

/*退出for循环,就是找到了插入的位置*/
/*注意:按道理来说,这句话可以放到下面注释了的那个位置也应该对的,但是就是不能。原因:你若理解了上面的第3条,就知道了。*/
first = first->Next; /*无序链表中的节点离开,以便它插入到有序链表中。*/

if (q == First) /*插在第一个节点之前*/
{
First = t;
}
else /*p是q的前驱*/
{
p->Next = t;
}
t->Next = q; /*完成插入动作*/
/*first = first->Next;*/
}
return;
}

void CStudent::BubbleSort()
{
AfxMessageBox("不会写");
}
//默认的排序
void CStudent:: sort()
{
DataNode*p3=First;

DataNode*p2,*p1,*p4,*p5;
while(p3->Next->Next!=NULL)//注意链表向前推进的方式
{
p2=p3->Next;
p5=p2;

p1=p2;

bool flag=false;

while(p1->Next!=NULL)//内存循环终止的条件
{
if(p5->number >p1->Next->number)//找出原链表中剩余节点中值最小的那个节点
{
p5=p1->Next;
p4=p1;
flag=true;
}

p1=p1->Next;
}

if(flag)//交换两个节点的顺序,值小的节点往前调
{

if(p2==p4)//此种情况为要交换顺序的两个节点相邻
{
p2->Next=p5->Next;
p5->Next=p2;
p3->Next=p5;
}
else//这种情况为要交换的两个节点不相邻
{
DataNode*temp=p5->Next;
p5->Next=p2->Next;
p3->Next=p5;
p4->Next=p2;
p2->Next=temp;
}

}

p3=p3->Next;
}
}

时间: 2024-11-04 16:44:14

vc6和c#性能比较的相关文章

PHP版本中的VC6,VC9,VC11,TS,NTS区别

以windows为例,看看下载到得php zip的文件名 php-5.4.4-nts-Win32-VC9-x86.zip VC6:legacy Visual Studio 6 compiler,是使用这个编译器编译的.VC9:Visual Studio 2008 compiler,就是这个编译器编译的. 这个其实没有什么太大的影响,因为从php 5.3,已经没有vc6版本提供下载了 IIS 如果想使用IIS配置PHP的话,那么需要选择Non-Thread Safe(NTS)版本的PHP Apac

vc6.0 PK vs2010

从VC++6.0不足看VisualC++2010新特性 说起VC,有人想到维生素C(维C),有人想到风险投资(venture capital), 程序员们尤其是做底层开发的程序员或老程序员们第一感觉肯定会想到Visual C++6.0.为什么是6.0而不是其它的版本?这里的原因就不用我再多讲了,因为太经典了!这个经典已经有了10年的光荣历史,微软的Visual Studio系列也已经发展到了Visual Studio 2010.漫长的辉煌中Visual C++6.0也暴露出了一些问题,在这篇文章

编译Boost 详细步骤 适用 VC6 VS2003 VS2005 VS2008 VS2010

vs2008编译boost [一.Boost库的介绍] Boost库是一个经过千锤百炼.可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一.Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C++社区中影响甚大,其成员已近2000人. Boost库为我们带来了最新.最酷.最实用的技术,是不折不扣的"准"标准库. Boost库中比较有名的几个库: (1)Regex,正则表达式库: (2)Spirit,LL parse

PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别

最近发现很多PHP程序员对PHP版本知识了解不是很清楚,自己也看了不少类似的文章,还是感觉不够明确和全面,网上的结论又都是模棱两可,在此,给出最完整甚至武断的解释. 本文讲解:VC6与VC9,Thread Safety与None-Thread Safe,Apache module与fastcgi的区别与选择. PHP的大版本主要分三支:PHP4/PHP5/PHP6 其中,PHP4由于太古老.对OO支持不力已基本被淘汰,请无视PHP4. PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,

VC6.0 编译生成Release或Debug版本

可以project->Set Active Config,选中release版本.此后,按F5或F7编译所得的结果就是release版本. -------------------------------------------------------- -------------------------------------------------------- vc6.0在设置选了win32 release,但是点了确定再打开设置,为什么又变成Win32 Debug了? 工程设置对话框中显示

PHP版本VC6与VC9/VC11/VC14、Thread Safe与None-Thread Safe等的区别

最近正好在弄一个PHP的程序,在这之前一直没有怎么以接触,发现对PHP版本知识了解不是很清楚,自己看了不少类似的文章,还是感觉不够明确和全面, 网上的结论又都是模棱两可,在此,给出最完整甚至武断的解释.(内面部分内容是摘自其它程序员的博文) 本文讲解:VC6与VC9,Thread Safety与None-Thread Safe,Apache module与fastcgi的区别与选择. PHP的大版本主要分支:PHP4/PHP5/PHP7(PHP6官方没有) 其中,PHP4由于太古老.对OO支持不

三种不同查找算法实际查找性能的对比

   一.查找问题的介绍 查找问题就是在给定的集合(或者是多重集,它允许多个元素具有相同的值)中找寻一个给定的值,我们称之为查找键.有许多查找算法可供选择,其中既包括直截了当的顺序搜索,也包括效率极高但应用受限的折半查找,还有那些将原集合用另一种形式表示以方便查找的算法.最后一类算法对于现实应用具有特别重要的价值,因为它们对于大型数据库的信息存取来说是不可或缺的. 对于查找来说,没有一种算法在任何情况下都是最优的.有些算法速度比其他算法快,但需要较多的存储空间:有些算法速度非常快,但仅适用于有序

一个C语言开发的炸金花纸牌游戏附带vs性能分析报告

一.游戏说明: 编写的是一个模拟炸金花的纸牌游戏,游戏附有一个操作说明文档,按照文档上的操作方法,可以简单的开启游戏,整个程序包扩一个编译好的.exe文件,和两个资源文件夹,分别存有该游戏运行时候所需要的照片资源和音乐资源,用户可以直接点击exe文件运行游戏,然后按照相关操作方法来进行游戏. 二.编程语言环境介绍: 本游戏是在VC6.0环境下,用C语言加上一个easyx的C语言图形库实现的.程序源文件建立的是.cpp文件,但是程序开发是采用的C语言语法和风格,建立.cpp文件的原因是,easyx

[转载]VC6中的文件后缀

VC文件扩展名 .APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度. .BMP:位图资源文件. .BSC:浏览信息文件,由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位. .C:用C语言编写的源代码文件. .CLW:ClassWizard生成的用来存放类信息的文件. .CNT:用来定义帮助文件中“Contents”的结构. .CPP或.CXX:用C++语言编写的