IMEIu盘写入保护怎么解除写入啊

平板/笔记本
HiLink生态产品
终端云服务专区
MTK平台机器IMEI串号丢失写入恢复教程,值得收藏!
&热心花粉&
来自:浏览器
本帖最后由 啷个里格弄 于
10:34 编辑
随着安卓系统的开放以及深度开发,刷入各种版本系统来体验或寻觅适合自己的ROM使手机玩家乐此不疲,但是经常刷机也容易导致IMEI串号丢失,小编的3X也遇到了一次,经亲身体验发个教程供大家参考。一、如何判断IMEI丢失拨号: *#06#& &或 设置-》关于手机-&状态信息-&IMEI信息显示未知的话,说明IMEI丢了。二、下载工具在PC端生成IMEI码(有备份的直接下一步)& && & 工具下载游客,如果您要查看本帖隐藏内容请& && &1、打开手机后盖或查看手机包装盒,查看你的IMEI码;2、打开写串号工具,输入IMEI码,若机器仅一个IMEI码则选择相同,有两个的选择输入,然后生成MPOB_001文件;3、将MPOB_001文件名改为IMEI.bak,然后复制到手机SD卡;
112.jpg (50.53 KB, 下载次数: 50)
11:48 上传
三、下载移动叔叔工具箱,游客,如果您要查看本帖隐藏内容请
width:100%">
&花粉超级圈主&
来自:浏览器
沙发是我啊。长姿势了,收藏备用。
width:100%">
&热心花粉&
来自:浏览器
试试看看结果
width:100%">
&自成一派&
来自:浏览器
感谢楼主的分享,内容很有用的呢
荣耀7 世界有点不同
width:100%">
&渐入佳境&
来自:浏览器
试试看看结果
width:100%">
&初窥门径&
来自:浏览器
fsdefsfdfsdfsfdsdfsdfsfds
width:100%">
&略有小成&
来自:浏览器
{:2_27:}{:2_27:}
width:100%">
&新学乍练&
来自:浏览器
没解锁码真是头疼。希望这个能搞定
width:100%">
&略有小成&
来自:浏览器
谢谢楼主分享
width:100%">
&登堂入室&
来自:浏览器
width:100%">
1000万花粉
纪念花粉俱乐部注册花粉数超过1000万
兴趣俱乐部十佳圈主荣誉勋章
好基友勋章
花粉好机友,注册时间大于99天
关注华为花粉俱乐部微信公众平台——“华为花粉俱乐部”
申请成为热心花粉,满足热心花粉条件即可获得!http://cn.club.vmall.com/forum.php?mod=viewthread&tid=183642
花粉俱乐部6周年
花粉俱乐部6周年
1月7日前可申请自动获得,1月7日后参与其它相关活动获得。
大富翁勋章
达到1万花瓣后可申请获得大富翁勋章
#花粉俱乐部6周年#华为手机让我结缘随手拍 偶住在奥地利边的不知名小村庄华为mate10 Pro拍摄于新疆塔城香港麦理浩径第二段美景…家乡随拍.荣耀9i体验作业之《梦幻银河》
花粉客户端
Make it Possible
Make your device special
华为云空间
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
关注花粉俱乐部
举报邮箱:
|关注花粉俱乐部:
增值电信业务经营许可证:苏B2-号|
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利经验750 米
在线时间219 小时
版本3.6.28
积分 1253, 距离下一级还需 747 积分
积分 1253, 距离下一级还需 747 积分
机型华为Honor
MIUI版本3.6.28
本帖最后由 千易中国 于
14:45 编辑
(2.69 MB, 下载次数: 3157)
14:12 上传
点击文件名下载附件
DFS+4[1].0.0.4
下载积分: 经验 -1 米
第一步:拨号 *#*#2846579#*#* 进入工程模式菜单。
第二步:依次点击 ProjectMenu / 后台设置 /4. USB端口配置,选择 第四个 生产模式 即可。
第三步:回到后台设置,选择1.高通后台打开设置,选择 后台打开(密码为0)
第四步:退出工程模式菜单,打开 USB 调试开关(也就是手机设置/应用程序/开发/USB调试)
第五步:重启手机(关机在开机亦可)
第六步:在电脑上安装DFS工具,你提前安装也没意见。先让手机正确连接电脑再运行DFS工具. 注:(前提条件确定手机/电脑已有驱动保证手机能正确连接电脑,XP系统请下载好手机USB驱动 WIN7直接连接就好会自动匹配驱动)
第七步:1.软件打开后会有许多黄色字体显示手机的所有信息。
2.点击 Ports 出现一个小框 双击 DBAdapter Reserved Interface 前面的原点会成为实心。(说明:Ports按扭是个绿色USB标志的按钮)
第八步:关闭Ports窗口(就是刚才打开的小框)点击 SPC 按钮(在Ports按钮下面). 在DFS日志里会显示 DEVICE UNLOCKED 字样. DFS日志框是一个背景为黑色的框框。
第九步:如果一切顺利,就是说上面步骤都对。转到 Programming 选项,填入你原来的IMEI
只需要填写IMEI一项,填写完成点击红色的write写入。
第十步:大概10秒左右完成,日志中也有显示。转到 Ports 禁用 DBAdapter Reserved Interface(就是第七步的2操作,让实心点成为空心点就可以)拔下数据线。
第十一步:现在做扫尾工作,把刚才开启的关闭就可以。
1.拨号 *#*#2846579#*#* ,进入工程模式菜单
2.依次点击 ProjectMenu / 后台设置 / USB端口配置, 选择 Normal 模式.
3.回到后台设置,点击 OTP NV过滤开关, 确定
4.回到后台设置,点击 高通后台打开设置, 选择 后台关闭.
5.重启手机
6.重启后*#06#查看
温馨提示:DSF工具需要{net framework 4.0}才能运行,net framework 4 : http://www.microsoft.com/zh-cn/download/details.aspx?id=17718
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
已有&3&人评分
感谢分享^_^
无法进入工程模式菜单
精品文章^_^
经验119 米
在线时间12 小时
版本3.7.26
积分 146, 距离下一级还需 54 积分
积分 146, 距离下一级还需 54 积分
机型华为Honor
MIUI版本3.7.26
通过手机发布
经验1956 米
在线时间186 小时
机型魅族MX2
签到次数43
MIUI版本8.6.7
通过手机发布
板凳& &好帖!
经验103837 米
威望297 米
在线时间2173 小时
版本8.6.20
机型小米手机5
签到次数252
MIUI版本8.6.20
通过手机发布
学习了,不过没看懂
经验102 米
在线时间11 小时
积分 145, 距离下一级还需 55 积分
积分 145, 距离下一级还需 55 积分
介个有啥用?
经验750 米
在线时间219 小时
版本3.6.28
积分 1253, 距离下一级还需 747 积分
积分 1253, 距离下一级还需 747 积分
机型华为Honor
MIUI版本3.6.28
可以写入IMEI串号。
经验5161 米
在线时间234 小时
版本3.12.20
积分 9574, 距离下一级还需 10426 积分
积分 9574, 距离下一级还需 10426 积分
机型小米手机1/1S
签到次数48
MIUI版本3.12.20
经验8112 米
在线时间577 小时
版本7.11.16
纯粹的发烧友
机型未知设备
签到次数76
MIUI版本7.11.16
通过手机发布
谁能明白我 发表于
经验8146 米
在线时间207 小时
版本V8.5.3.0.MBECNED
积分 8555, 距离下一级还需 11445 积分
积分 8555, 距离下一级还需 11445 积分
机型未知设备
签到次数85
MIUI版本V8.5.3.0.MBECNED
写这个串号没有什么用呀。作山寨吗?
经验7228 米
在线时间293 小时
版本6.9.11
积分 8948, 距离下一级还需 11052 积分
积分 8948, 距离下一级还需 11052 积分
机型MOTO ME865
签到次数27
MIUI版本6.9.11
通过手机发布
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
MIUI七周年
点赞金米兔勋章
参加小米上市回帖活动
MIUI 10专属勋章
参加回帖活动
2018新年勋章
参与回帖活动
2017圣诞节勋章
参与回帖活动
MIUI3亿用户纪念勋章
参与回帖活动
感恩节勋章
参与回帖活动
万圣节勋章
参加回帖活动
米兔月饼勋章
参加回帖活动
MIUI七夕鹊桥勋章
MIUI 9纪念勋章
小米7周年勋章
2017米粉节晒单赢专属勋章
“澎湃S1 ”芯片纪念勋章
参与活动回帖可得
参与红米Note 4X活动
2017年小金鸡勋章
回复2016年度评选活动贴
APP 1000万
MIUI论坛APP注册用户突破1000万纪念勋章
小火箭勋章
神舟11号 话题活动
MIUI 300周
MIUI 300周更新纪念勋章
为奥运加油勋章
为奥运加油勋章
MIUI 8纪念勋章
MIUI 8纪念勋章
小米六周年
小米六周年米粉节
MIUI 3000万
MIUI 3000万发烧友纪念勋章
MIUI 2000万
MIUI 2000万发烧友纪念勋章
1000万用户纪念勋章
MIUI1000万用户纪念勋章
MIUI 7纪念勋章
小米商城购买纪念勋章
论坛APP购买小米商品获得
参加流量购买活动
MIUI五周年
MIUI五周年纪念勋章
小米平板首发纪念勋章
小米平板首发纪念勋章
MIUI三周年
MIUI三周年纪念勋章
已关注极客秀微信
已关注微信
发烧友俱乐部
发烧友俱乐部
MIUI六周年
MIUI六周年纪念勋章
MIUI 100周
100周发布纪念勋章
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号1. 为什么要写入IMEI
项目初期,板子中可能不包含IMEI号,但是又需要读取IMEI来验证某些功能。
2. 如何修改
通过修改NV550,其中ue_imei[0]表示的序列号的长度,这一位设置错误会导致设置的nv不生效,nv550如下图所示。
ue_imei[1]~ue_imei[8]为IMEI序列号,写入的值是反的,举例如下:
IMEI:1 23 45 67 89 87 65 43
写入的值为:1A 32 54 76 98 78 56 34
其中第一个值很特殊,A是可以用其他数字代替,在QMI消息读取IMEI号时,会将第一位排除,见下面的代码:
modem_proc\datamodem\interface\qmidata\src\ds_qmi_dms.c
static qmi_error_type_v01 qmi_dmsi_get_device_serial_numbers_ext
is_encrypted,
qmi_dmsi_client_info_type *clnt_info
/* Skip the first byte because it is just the ID */
memscpy( (uint8*)dev_serial_num_info,
(NV_UE_IMEI_SIZE-1)*2-1,
imei_ascii + 1,
(NV_UE_IMEI_SIZE-1)*2-1 );
3. 验证是否写入成功 
利用AT+CGSN命令,来查询IMEI,若出现下面结果,则代表IMEI写入成功。
阅读(...) 评论()本站木有非理性广告和有害内容,请大度地将本站加入广告屏蔽白名单吧~~~
> 来,创建一个高效的IMEI编码生成器
话说,今天下午群里面有个同学求助一段代码。
他想问的是,这个 tempimei[j * 2] - 0x30 是啥子意思?
0x2. 其实这是很常见的一种写法
我们留意到 tempimei 这个变量其实是一个字符串。在.NET中,对一个字符串取索引,则是取出对应的字符。
字符可以隐式转换为int,所以tempimei[j*2]-0x30的意思是,将j*2索引位置的字符转换成int后减去0x30。为什么要这么减呢,我们参考一下:
由以上表格可以看出,0x30其实就是0的ASCII码。那么把一个为数字的字符减去它呢,那就恰好是这个字符所实际代表的数字值了。比如 '4'-0x30=0x34-0x30=4,这是多么巧的巧合啊。
0x3. 其实上面的这个问题是小问题
那什么是大问题呢?
大问题是这个代码的性能问题。根据这位同学的反应,这个代码其实最早是从一个Java程序翻译过来的。而Java的程序代码,如下所示。
虽然Java的语法在我看起来很LOW,但是不得不承认的是,Java到C#的Port相当精准,甚至字符转数字的时候还有那么点儿小机灵在里面(Java的就是直接用Integer.parseInt的。咦,为啥既然已经是Integer去Parse了为啥又要说parseInt?咦?为啥我要说又?)
据说这个Java版本的带来来源于这个。然后我过去看了一下,还真是。
然后根据他的表述,这个其实已经有专门的软件做这事儿了,喏。
然后呢,这个程序呢,最大的问题呢,就是慢。
辣么究竟有多慢呢,大概呢,在他的I3笔记本上,生成一万个号大概需要三分多钟(原话如是说,开始生成后就会一直无响应,看文件慢慢涨到160多K的时候,就完成了……)。真的好慢喔
我觉得真的好慢,然而我并没有这个Java版本的,所以无从考证。不过我倒是拿到一个C#版本的,测试了一下,好像并没有他说的那么慢,可能是因为Java本身就辣么慢吧。
C#版本这里提供一个下载,有兴趣的同学可以下载回去看看。
我们来看一下C#版本的核心代码。
string tempimei = "";
string imei = "";
int temp = 0;
string AfilePath = "";
long num = Int64.Parse(textBox1.Text.ToString(), System.Globalization.NumberStyles.Integer);
int step = Int16.Parse(textBox4.Text.ToString(), System.Globalization.NumberStyles.Integer);
int count = Int16.Parse(textBox5.Text.ToString(), System.Globalization.NumberStyles.Integer);
saveFileDialog1.Filter = "txt files(*.txt)|*.txt";//设置保存文件类型
if ((saveFileDialog1.ShowDialog() == DialogResult.OK))
AfilePath = this.saveFileDialog1.FileN
int[] d = new int[2];
for (int i = 0; i & i++)
tempimei = "";
if (i != 0)
tempimei = Convert.ToString(num, 10);
for (int j = 0; j & 7; j++)
//计算校验位
d[0] = tempimei[j * 2] - 0x30;
d[1] = (tempimei[j * 2 + 1] - 0x30) * 2;
temp = temp + d[0] + (d[1] / 10) + (d[1] % 10); //计算校验位
temp = 10 - (temp % 10);
if (temp == 10)
tempimei += Convert.ToString(temp, 10);
imei += tempimei + Environment.NewL
FileStream fs = new FileStream(AfilePath, FileMode.Create);
byte[] writeMesaage = Encoding.GetEncoding("GB2312").GetBytes(imei);
fs.Write(writeMesaage, 0, writeMesaage.Length);
fs.Close();
1234567891011121314151617181920212223242526272829303132333435363738394041424344
string tempimei = "";string imei = "";int temp = 0;&&&&&&&&&&&&&&string AfilePath = "";&&&&&&&&&&&&&&&&&long num = Int64.Parse(textBox1.Text.ToString(), System.Globalization.NumberStyles.Integer);int step = Int16.Parse(textBox4.Text.ToString(), System.Globalization.NumberStyles.Integer);int count = Int16.Parse(textBox5.Text.ToString(), System.Globalization.NumberStyles.Integer);&saveFileDialog1.Filter = "txt files(*.txt)|*.txt";//设置保存文件类型if ((saveFileDialog1.ShowDialog() == DialogResult.OK)){&&&&AfilePath = this.saveFileDialog1.FileName;&&&&&int[] d = new int[2];&&&&for (int i = 0; i & count; i++)&&&&{&&&&&&&&tempimei = "";&&&&&&&&if (i != 0)&&&&&&&&{&&&&&&&&&&&&num += step;&&&&&&&&}&&&&&&&&tempimei = Convert.ToString(num, 10);&&&&&&&&&temp = 0;&&&&&&&&for (int j = 0; j & 7; j++)&&//计算校验位&&&&&&&&{&&&&&&&&&&&&d[0] = tempimei[j * 2] - 0x30;&&&&&&&&&&&&d[1] = (tempimei[j * 2 + 1] - 0x30) * 2;&&&&&&&&&&&&temp = temp + d[0] + (d[1] / 10) + (d[1] % 10); //计算校验位&&&&&&&&}&&&&&&&&temp = 10 - (temp % 10);&&&&&&&&if (temp == 10)&&&&&&&&{&&&&&&&&&&&&temp = 0;&&&&&&&&}&&&&&&&&tempimei += Convert.ToString(temp, 10);&&&&&&&&imei += tempimei + Environment.NewLine;&&&&}&&&&FileStream fs = new FileStream(AfilePath, FileMode.Create);&&&&byte[] writeMesaage = Encoding.GetEncoding("GB2312").GetBytes(imei);&&&&fs.Write(writeMesaage, 0, writeMesaage.Length);&&&&fs.Close();}
核心代码和之前贴出来的并没有很大的差别,然后还附赠了一个很友好的算法说明。
对照这个说明,再去看它的计算代码,就一目了然了,这里有几个细节。
输入一共是14位的数字,结果的15位最后1位是校验和
前14位数字俩俩配种,然后算出来一个数字,最后所有的数字总和经过一定的处理后,作为校验码
算法中,俩俩配种这个过程,使用的是将原来的数字转换为字符串再分别按位处理的方式进行运算的
生成的最后写入文件,此程序使用的方式是将所有的结果依次连接为一个巨大的字符串然后一次性写入文件(imei)。这个方式我就不说了,想想100W个结果时的恐怖好了……
在类似的需求中,当要求按位处理一个数字时,将其转换为字符串再按索引处理是一个极为常见的思路。然而这个思路最大的问题就是字符串的转换损耗,伴随着GC的压力。
由于字符串是一个较为特殊的对象,在频繁的字符串创建、取索引再重新转为数字的过程中,会伴随着大量无用的对象创建以及字符处理。就算是字符串驻留也不能完全抵消此类的影响。
因此,想要提高性能,避免字符串大量的创建是必须做到的。
先来看看这个C#版的性能。根据它的算法,抽出以下的核心代码,将量设置大一点(100W),跑一下看看大概需要多久。
public static void Main(string[] args)
var count = 1000000;
var imei = "";
var tempimei = "";
var num = 00L;
var step = 1;
var temp = 0;
var st = new Stopwatch();
st.Start();
int[] d = new int[2];
for (int i = 0; i & i++) {
tempimei = "";
if (i != 0) {
tempimei = Convert.ToString(num, 10);
for (int j = 0; j & 7; j++) {
//计算校验位
d[0] = tempimei[j * 2] - 0x30;
d[1] = (tempimei[j * 2 + 1] - 0x30) * 2;
temp = temp + d[0] + (d[1] / 10) + (d[1] % 10); //计算校验位
temp = 10 - (temp % 10);
if (temp == 10) {
tempimei += Convert.ToString(temp, 10);
imei += tempimei + Environment.NewL
st.Stop();
Console.WriteLine("生成完成。100W个序列生成用时 " + st.ElapsedMilliseconds + "毫秒.");
Console.ReadKey();
123456789101112131415161718192021222324252627282930313233343536373839
public static void Main(string[] args)
var count = 1000000;
var imei = "";
var tempimei = "";
var num = 00L;
var step = 1;
var temp = 0;&
var st = new Stopwatch();
st.Start();&
int[] d = new int[2];
for (int i = 0; i & count; i++) {
tempimei = "";
if (i != 0) {
num += step;
tempimei = Convert.ToString(num, 10);&
for (int j = 0; j & 7; j++) {&&//计算校验位
d[0] = tempimei[j * 2] - 0x30;
d[1] = (tempimei[j * 2 + 1] - 0x30) * 2;
temp = temp + d[0] + (d[1] / 10) + (d[1] % 10); //计算校验位
temp = 10 - (temp % 10);
if (temp == 10) {
tempimei += Convert.ToString(temp, 10);
imei += tempimei + Environment.NewLine;
st.Stop();&
Console.WriteLine("生成完成。100W个序列生成用时 " + st.ElapsedMilliseconds + "毫秒.");
Console.ReadKey();
最后结果相当震撼,这个程序用了大概……我也不知道,因为我从凌晨3点30分等到凌晨5点30分它也没跑完,我实在没有等它的耐心了……并且如果你有耐心一直看的话,会发现这货的内存占用波动非常大,这得归功于大量字符串的生成和销毁。
以下是在Process Explorer中显示的性能曲线。另外从图中可以看出,除了内存占用波动很大以外,CPU密集型的程序居然只占了不大的CPU,这是因为GC压力导致的运行效率过低。
……果然太慢,慢到了几乎没法用的地步……
0x4. 开始重构
简单粗暴点。干嘛那么温柔。
根据需求,将整个过程分解为三个模块。
迭代模块,根据需求,生成指定的IMEI序列
验证模块,将输入的IMEI编码进行校验并附上校验和
文件模块,将最终的结果写入文件中
为了避免大量字符串的创建消耗,决定将输入输出的结果全部使用数字来表示,并尽可能避免字符串创建
简单粗暴点,直接上代码,看注释。
/// &summary&
/// 计算输入的IMEI码校验和,并返回带有校验和的IMEI编码
/// &/summary&
/// &param name="imei"&不带校验和的14位IMEI编码&/param&
/// &returns&带有校验和的15位IMEI编码&/returns&
internal static long Generate(long imei)
//创建临时副本。在计算过程中,变量会被修改
var currnet = imei;
//将数字分组,俩俩一组,则索引为0到7.使用 LINQ创建一个0到7的序列,并遍历
//temp为最终的校验和,使用Aggregate进行迭代
var checksum = Enumerable.Range(0, 7).Aggregate(0, (temp, index) =&
//不使用字符串取索引再转回数字的方式,那样无用功太多。直接使用数字取余计算
//由于取余时个位数(相当于原来的第二位)是先获得的,因此需要注意顺序
var d1 = (int)(currnet % 10) * 2;
//此处相当于将数字序列整体右移一位,以便于继续取十位上数字
currnet = currnet / 10;
var d0 = (int)(currnet % 10);
currnet = currnet / 10;
//对校验和进行迭代
return temp + d0 + d1 / 10 + d1 % 10;
//原算法中的计算
checksum = 10 - (checksum % 10);
if (checksum == 10)
checksum = 0;
return imei * 10 + checksum;
……这个就更没有技术含量了,我相信我不写注释乃们也看得懂。
internal static IEnumerable&long& GenerateSingleM1(long start, int step, int count)
var list = new List&long&(count);
for (int i = 0; i & count; i++)
list.Add(Generate(start));
start += step;
return list;
写入文件摒弃一次性写入方案,因为当数量一多(比如100万)的时候,光连接字符串就能弄死你,还不如一行行写入呢。
internal static void Write(string path, IEnumerable&long& data)
var fs = new StreamWriter(path);
foreach (var item in data)
fs.WriteLine(item.ToString());
fs.Close();
以上是不是很没有技术含量?简单思路就是将所有字符串操作干掉,改为数学运算。
我们来看一下同样的100W次生成,这个程序耗时多少。
是的,你没看错,166毫秒生成100W数据。
思路很简单,效果很赞
0x5. 继续重构
到这里,你以为我就会收手了吗?图样图森破
现在我回过头再去看那个校验和算法,感觉虽然用LINQ来生成序列看起来很时髦,但其实是脱裤子放屁,并不是特别需要。不仅如此,它还导致新建了一个序列的开销。
所以要不直接简单粗暴原始点?
internal static long Generate1(long imei)
var current = imei;
var checksum = 0;
//去掉LINQ,变为最原生的循环
for (int i = 0; i & 7; i++)
var d1 = (int)(current % 10) * 2;
current = current / 10;
var d0 = (int)(current % 10);
current = current / 10;
checksum += +d0 + d1 / 10 + d1 % 10;
checksum = 10 - (checksum % 10);
if (checksum == 10)
checksum = 0;
return imei * 10 + checksum;
让我们再来测试一下。
63毫秒完成100W数据生成,结果略狂野啊
0x6. 继续重构!
到这里就已经是极致了吗?非也!
我们要并行化!利用多核并行运算!
话说这个我一开始都没想起来,还是受人启发的……
internal static IEnumerable&long& GenerateParallelM1(long start, int step, int count)
var list = new List&List&long&&();
//由系统自动分区计算
Parallel.ForEach(Partitioner.Create(start, start + count), _ =&
var tlist = new List&long&(count);
for (var i = _.Item1; i & _.Item2; i++)
tlist.Add(Generate(i));
lock (list)
list.Add(tlist);
//由于并行化的时候,返回的顺序不一定是按照你期望的顺序,所以这里需要先排序一次,以保证顺序和期望的一致
return list.OrderBy(s =& s[0]).SelectMany(s =& s);
考虑到我们之前有过俩方案,于是再俩俩随机滚床单之后,就有四组CP了。然后我们分别测试一下并行的性能。
耗时为原耗时(166毫秒)的一半。
那么方法二嘞?
17毫秒生成数据,耗时只有三分之一。
毫无疑问,算法二+并行最优秀,而且数据量越大,优势越大。
人家说希望一次生成一百万,但是每一万生成一个文件。
既然都做到这里了,不妨加上咯……
internal static void Write(string path, IEnumerable&long& data, int piece = 0)
if (piece == 0)
var fs = new StreamWriter(path);
foreach (var item in data)
fs.WriteLine(item.ToString());
fs.Close();
var lineCount = 0;
var fileIndex = 1;
var directoryName = Path.GetDirectoryName(path);
var fileName = Path.GetFileNameWithoutExtension(path);
var fileExtension = Path.GetExtension(path);
StreamWriter fs = null;
foreach (var item in data)
if (fs == null)
fs = new StreamWriter(Path.Combine(directoryName, fileName + "_" + (fileIndex++).ToString("0000") + fileExtension));
lineCount = 0;
fs.WriteLine(item.ToString());
if (++lineCount &= piece)
fs.Close();
fs = null;
if (fs != null)
fs.Close();
呐,不是很重要的玩意儿,拿去吧~授人以渔,也要授人以鱼
好了。嗯。啊。我好困。
or分享 (0)
才能发表评论 You need
to post a comment :-)【图片】IMEI无效,直接从手机工程模式就能写入!!【基伍大7吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,376贴子:
IMEI无效,直接从手机工程模式就能写入!!
刚在基伍官方论坛上看了一个帖子教程,主要讲解了怎么从手机工程模式中写入IMEI,我也在大7上试了下,确认可行,现共享给大家,不能上传附件,只能复制粘贴了。。。超简单更改IMEI教程(手机端操作即可)一、
适用机型:适用于G9、G9T、A800、F7等机型二、操作步骤:1、
在拔号按*3646633*--& 进入connectivity2、
选 cds information --& radioinformation 3、
选 phone1(SIM1)4、
在command (有A+的位置)列按入"AT + EGMR = 1,7,"你的IMEI""(在输入sim2时改为"AT +EGMR = 1,10, "你的IMEI") 5、
按 "SEND ATCOMMAND"6、
完成后重启手机【例如 "AT + EGMR = 1,7,"111"按 "SEND ATCOMMAND"完成后重启手机】
7月14-15日无锡车展,大7同期低价,特惠让利到底,报名送门票+签到礼等!订车送6668元豪华大礼包,整点抽取自行车,电烤箱等大奖.
这是个好东西
相当不错或,很方便 ,赞
这是什么撸主能说详细点么
吧太火 还是帖子太冷,一会不看,就沉下去了
怎么保证不下沉呢
我的卡1没有网络 移动2G 的卡 我试了你的方法 结果最后说发送失败 怎么回事
命令输入错误吧
好贴天天顶
又跑下去了
这么好的帖子,一定要顶上去
天天争头条
每天顶一次
重启后还可用吗?
完成后是自动重启?话说咱点那个SEND什么的下面跳出的A什么什么的是什么意思?返回后在进还是没看到P1有imei⊙▽⊙ 咱只是看看,咱不说话。什么?你看到咱说了?嘛~肯定是你Lu多了出现幻觉了~ --来自伪娘动漫吧    --来自助手版贴吧客户端     --来自半人马座a星团的摄影爱好者
搞了以后还是没有
我只想弱弱的问一句,IMEI是什么啊
问一下,怎么知道自己的另一个IMEI?电池槽和手机盒子上都只有一个。
IMER是不是可以乱填
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 内存卡禁止写入怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信