[转载] Dictionary,Object,Array内存消耗,读取,写入,效率测试

本文通过一个简单的AS3性能测试案例,对比了使用Dictionary、Object和Array三种数据结构在Flash环境中的性能表现,包括它们的内存占用及读写速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[url]http://bbs.9ria.com/viewthread.php?tid=70879&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D86400[/url]


package
{
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.sampler.getSize;
import flash.utils.Dictionary;
import flash.utils.getTimer;

/**
*
* @author iifla.com
*/
public class TestMain extends Sprite
{
var m_dec:Dictionary;
var m_obj:Object;
var m_num:int;
private var m_arr:Array;

public function TestMain()
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, testListener);
trace("ok...");
}

private function testListener(e:KeyboardEvent):void
{
var t_num:int=100000;
if (e.charCode == 97)
{
m_num = getTimer();
initDict(t_num);
trace("写入时间 initDict: " + (getTimer() - m_num));
m_num = getTimer();
initObje(t_num);
trace("写入时间 initObje: " + (getTimer() - m_num));
m_num = getTimer();
initArray(t_num);
trace("写入时间 initArray: " + (getTimer() - m_num));

trace("内存 Dictionary: " + (getSize(m_dec)));
trace("内存 Object: " + (getSize(m_obj)));
trace("内存 Array: " + (getSize(m_arr)));
}
else if (e.charCode == 98)
{
m_num = getTimer();
for ( i = 0; i < t_num; i++)
{
testDictionary(i);
}
trace("读取时间 testDictionary: " + (getTimer() - m_num));

m_num = getTimer();
for (var i:int=0; i < t_num; i++)
{
testObject(i);
}
trace("读取时间 testObject: " + (getTimer() - m_num));

m_num = getTimer();

for ( i = 0; i < t_num; i++)
{
testArray(i);
}
trace("读取时间 testArry: " + (getTimer() - m_num));
}
}

private function testDictionary(i:int):void
{
m_dec[i](i);
}

private function testObject(i:int):void
{
m_obj[i](i);
}

private function testArray(i:int):void
{
m_arr[i](i);
}

private function initDict(_num:int):void
{
m_dec = new Dictionary();
for (var i:int=0; i < _num; i++)
{
m_dec[i] = traceLog;
}
}

private function initObje(_num:int):void
{
m_obj = new Object();
for (var i:int=0; i < _num; i++)
{
m_obj[i] = traceLog;
}
}

private function initArray(_num:int):void
{
m_arr = new Array();
for (var i:int=0; i < _num; i++)
{
m_arr[i] = traceLog;
}
}

private function traceLog(_str:int):void
{
// trace("_str==" + _str);
}
}
}


测试的结果:
写入时间 initDict: 49
写入时间 initObje: 42
写入时间 initArray: 27


内存 Dictionary: 1048616
内存 Object: 1048600
内存 Array: 483360


读取时间 testDictionary: 114
读取时间 testObject: 110
读取时间 testArry: 103

相信肯定跟好的人想法不一致了。
using OPCAutomation; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace thinger.OPCClient { public partial class Form1 : Form { //opc服务器对象 private OPCServer opcserver = new OPCServer(); private bool isConnected = false; //组项的管理 private OPCGroups opcGroups; private List<string> monitoredItems = new List<string>(); private Dictionary<int, string> clientHandleMap = new Dictionary<int, string>(); // OPCAutomation.IOPCAutoServer server = new OPCAutomation.OPCServer(); //创建一个OPCGroup浏览器对象 OPCGroup oPCGroup; public Form1() { InitializeComponent(); object serverlist = server.GetOPCServers("MJH"); foreach (var item in (Array)serverlist) { if (!this.lst_Servers.Items.Contains(item)) { this.lst_Servers.Items.Add(item); } } } private void Form1_Load(object sender, EventArgs e) { } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { try { server.Connect(this.lst_Servers.SelectedItem.ToString(), "MJH"); MessageBox.Show("链接成功:"); //创建一个CreateBrowser浏览器对象 OPCBrowser opcbrower = server.CreateBrowser(); opcbrower.ShowBranches(); opcbrower.ShowLeafs(true); foreach (var item in opcbrower) { this.listBox1.Items.Add(item); } } catch (Exception ex) { MessageBox.Show("链接失败:" + ex.Message); } } private void btn_Disconn_Click(object sender, EventArgs e) { server.Disconnect(); } private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e) { } List<string> opcltems = new List<string>(); private void button3_Click(object sender, EventArgs e) { if (this.listBox1.SelectedItem != null && !opcltems.Contains(this.listBox1.SelectedItem.ToString())) { opcltems.Add(this.listBox1.SelectedItem.ToString()); this.listBox2.Items.Add(this.listBox1.SelectedItem.ToString()); } } private void listBox2_SelectedIndexChanged(object sender, EventArgs e) { } //做读取功能 private void button_1_Click(object sender, EventArgs e) { OPCGroups oPCGroups = server.OPCGroups; oPCGroup = new OPCGroup(); //添加一个OPCGroup组 oPCGroups.Add(oPCGroup); //将变量加入这个组里面去,运用array的类型读取异步数据 List<string> opcitemids = new List<string>(); List<int> clienthandles = new List<int>(); Array serverHandles; Array errors; int cancelid; opcitemids.Add(""); clienthandles.Add(0); foreach (var item in opcltems) { opcitemids.Add(item); clienthandles.Add(opcitemids.IndexOf(item)+1); } Array opcitem = opcitemids.ToArray(); Array serverHandle = opcitemids.ToArray(); oPCGroup.OPCItems.AddItems( ) } } } 这段代码我想简单的修改一下,能够实现读取写入数据的功能
最新发布
08-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值