using System;
using System.Collections;
using System.Collections.Generic;namespace DefaultNamespace
{
public class ListTest
{
static public void Main(String[] args) {
int max = 1000*1000*1;
List<Int32> list = new List<Int32>();
DateTime st = DateTime.Now;
int temp = 0;
for (int i = 0; i < max; i++) {
list.Add(i);
temp = list[0];
temp++;
list.Remove(0);
}
Console.WriteLine(DateTime.Now.Ticks - st.Ticks);
}
}
}
初学 .net 2.0 ,写了以上的代码,居然在我的机器(P4 3.0G + 512M 内存)上,使用 .net 2.0 执行上面编译出来的代码, 居然执行了 5分钟还不结束,是我的程序有问题??
还是 .net 真的这么慢吗?!!!!!!
using System.Collections;
using System.Collections.Generic;namespace DefaultNamespace
{
public class ListTest
{
static public void Main(String[] args) {
int max = 1000*1000*1;
List<Int32> list = new List<Int32>();
DateTime st = DateTime.Now;
int temp = 0;
for (int i = 0; i < max; i++) {
list.Add(i);
temp = list[0];
temp++;
list.Remove(0);
}
Console.WriteLine(DateTime.Now.Ticks - st.Ticks);
}
}
}
初学 .net 2.0 ,写了以上的代码,居然在我的机器(P4 3.0G + 512M 内存)上,使用 .net 2.0 执行上面编译出来的代码, 居然执行了 5分钟还不结束,是我的程序有问题??
还是 .net 真的这么慢吗?!!!!!!
解决方案 »
- Windows Service 多个timer如何不同时执行?
- C# 中如何把PictureBox 的图片添加到 ImageList ?
- 菜鸟级问题:这个为什么不行?
- 倾家荡产(70分)求一个PostMessage使用的实例
- 同一种类型居然无法强制转换
- DataList1控件可以指定要显示的数据吗
- DataView.sort问题
- 请问,我现在是学C#的,想学习C++.NET 请问该买本什么样的书籍来看 ,,??
- 问个winform程序退出的问题
- 在DataGrid中,gird.GetCellBounds(0, 0).Location返回的是什么?
- 在win form中如何获得当前项目的根路径?
- 图片象素格式的问题,急。。100分不够还可再开帖加
list.Remove(0);
list.Remove方法其实也是一个循环,它在找值等于0的项,然后删除
在 Java 里,类似的代码(存入一个数据,再取出这个数据,最后删除这个数据):
但 int max = 1000*1000*1000;
看到了吗? 是 1000*1000*1000 一共 10亿 次操作哦!在我的机器上大约只需要 70秒 就执行完毕.难道 .net 这么慢吗?? 整整少了 1000 倍, 还 5分钟都不能结束.*************附Java的代码,大家可以试试**************
package util;
import java.util.*;
public class ArrayListTest {
public static void main(String[] args) {
int max = 1000*1000*1000;
ArrayList<Integer> list = new ArrayList<Integer>(10);
int temp = 0;
st = new SimpleTimer().start();
for (int i = 0; i < max; i++) {
list.add(i);
temp = list.get(0);
temp++;
list.remove(0);
}
long t = st.end();
System.out.println("ArrayList<Integer>共用时间(毫秒): "+t);
}
}
********SimpleTimer类**************
package util;
public class SimpleTimer {
long startTime = 0;
public SimpleTimer start() {
startTime = System.currentTimeMillis();
return this;
}
public long end() {
return System.currentTimeMillis() - startTime;
}
}
list.add(i);//这里装箱了
temp = list.get(0);//这里拆箱了。所以,Java的那个容器里面从始至终就只有一个对象。
因为temp = list.get(0);存在拆箱。
所以你的temp++变成了毫无意义的工作,并没有对容器内的值产生任何操作。
而下面的list.remove(0);很自然的把这个值给Remove掉了。也就是说,从始至终,那个容器里面的项个数从来没有超过1。
以上,均为信口开河,因为我没有Java环境。但是我相信对这么大一个容器进行操作不可能那么快。
你去试试看,是不是如我所言?等你的测试结果。有Java的也帮忙测试一下……我想知道我的猜测是不是正确。
DateTime st = DateTime.Now;
list.Add(i);
temp = list[0];
temp++;
list.Remove(0);
Console.WriteLine(DateTime.Now.Ticks - st.Ticks);
结果每24次循环出现一次156250,其余为0
P4 2.4B,512M
莫明其妙!
整个循环相当于1000*1000*1000*1000/2倍,
我在二楼已经说了
你有没搞错啊?java中的list.remove(0)是删除list的第0个,这样的list中最后是空的
你应该修改c#程序为
using System;
using System.Collections;
using System.Collections.Generic;namespace DefaultNamespace
{
public class ListTest
{
static public void Main(String[] args) {
int max = 1000*1000*1;
List<Int32> list = new List<Int32>();DateTime st = DateTime.Now;
int temp = 0;
for (int i = 0; i < max; i++) {
list.Add(i);
temp = list[0];
temp++;
list.RemoveAt(0);
}
Console.WriteLine(DateTime.Now.Ticks - st.Ticks);
}
}
}