一、安装Eclipse MAT插件
1.打开Eclipse->help->add->输入如下值
2.勾选Memory Analyzer for Eclipse IDE选项
3.一直点击next完成安装
二、使用
1.打开ADT的DDMS视图,在devices列表中选择一个进程(这里选择oschina app进行分析)并点击红框处,然后点击右边那个按钮
这时就会出现MAT的overview界面
2.界面分析
a.overview界面,如上图,提供一个概览界面
b.Histogram视图,它提供每个类的对象统计
c.支配树(Dominator Tree),提供程序中最占内存的对象 (described later in the article)
d.对象查询语言(Object Query Language Studio), 用来写MAT查询的工具
e.专家系统测试(Expert System Test)
i.堆Dump概况(Heap Dump Overview) –提供堆dump...
利用ViewHolder优化自定义Adapter的典型写法
用ViewHolder,主要是进行一些性能优化,减少一些不必要的重复操作
public class MarkerItemAdapter extends BaseAdapter
{
private Context mContext = null;
private List<MarkerItem> mMarkerData = null;
public MarkerItemAdapter(Context context, List<MarkerItem> markerItems)
{
mContext = context;
mMarkerData = markerItems;
}
public void setMarkerData(List<MarkerItem> markerItems)
{
mMarkerData = mark...
关于listview的异步加载,网上其实很多示例了,中心思想都差不多,不过很多版本或是有bug,或是有性能问题有待优化,下面就让在下阐述其原理以探索个中奥秘
在APP应用中,listview的异步加载图片方式能够带来很好的用户体验,同时也是考量程序性能的一个重要指标。关于listview的异步加载,网上其实很多示例了,中心思想都差不多,不过很多版本或是有bug,或是有性能问题有待优化。有鉴于此,本人在网上找了个相对理想的版本并在此基础上进行改造,下面就让在下阐述其原理以探索个中奥秘,与诸君共赏… 贴张效果图先: 异步加载图片基本思想: 1.先从内存缓存中获取图片显示(内存缓冲) 2.获取不到的话从SD卡里获取(SD卡缓冲) 3.都获取不到的话从网络下载图片并保存到SD卡同时加入内存并显示(视情况看是否要显示) OK,先上adapter的代码:
复制代码代码如下:
public class LoaderAdapter extends BaseAdapter{&nbs...;
对于这部分的内容,将分成4小节来描述:
1.职责与关系
2.消息循环
3.线程与更新
4.几点小结
--------------------------------------------------------------------------------------------------
1) 接下来,我们开始这部分的内容,首先了解一下各自的职责及相互之间的关系。
职责
Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。
Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。
MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。
Looper:消息泵,不断地从MessageQ...
基础方法:
ChangeFillShape
//修改填充形状
ChangeFillShape(...)
// 摘要:
// 修改填充形状
//
// 参数:
// g:
// 图形画板
//
// Forebrush:
// 填充色
//
// rect:
// 区域
//
// en_fillshape:
// 填充形状枚举
//
// fillshpape:
// 填充形状参数
//
// Backbrush:
// 背景色
//
// isOutside:
// ...
//设置图片资源
private Image imgAgo;
public override void SetParam()
{
base.SetParam();
// 读取前背景
string _imagePath = Environment.CurrentDirectory + @"\QrCodeModel\Images\Angry_Birds\boom.png";
imgAgo = Image.FromFile(_imagePath);
}
//在生成二维码之后,加入前背景图层
//TODO:一系列个性二维码生成方案
public override Bitmap Encode(string content)
{
try
{
matrix = QrCod...
大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了。很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClient.SqlBulkCopy 对于新手来说还是比较陌生的,这个就是传说中效率极高的bcp,6万多数据从excel导入到sql只需要4.5秒。
using System;using System.Data;using System.Windows.Forms;using System.Data.OleDb;namespace WindowsApplication2{ public partial class Form1 : Form { public Form1() { &...
//设置图片资源
private Image img1;
public override void SetParam()
{
base.SetParam();
//读取图片
string _imagePath1 = Environment.CurrentDirectory + @"\image\point2.jpg";
img1 = Image.FromFile(_imagePath1);
}
//首先设置背景透明
//SolidBrush Backbrush = new SolidBrush(QrCodeEncoder.QRCodeBackgroundColor);
SolidBrush Backbrush = new SolidBrush(Color....
引发原因:是因为我在还原数据库的时候,还有其他的用户正在使用数据库,所以就会出现以上提示。解决方法:1,设置数据库在单用户模式下工作。设置方法:在需要还原的数据库上右击,在右键菜单命令上选择"属性"- >"选项"- >"状态"- >"限制访问"- >"Single"。这是SQLSERVER2005的菜单命令,其它版本请自己查找。2,利用SQL语句,杀死正在使用该数据库的所有进程,自己以前在做一个SQL SERVER操作小工具的时候有写过该功能的SQL,贴出来供大家参考:
declare @dbname varchar(50)set @dbname='数据库名称'declare @sql varchar(50)declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) fro...
一·单一职责原则(Single-Responsibility Principle)
定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
宿舍里并不能好好学习,自习还是得去图书馆。这是一条颠扑不破的真理!被无数学子千百次的实践所证明!我就想不通了,宿舍里有桌有椅,能上床小睡,能下床读书,饿了吃外卖,渴了喝奶奶,自个习,凭啥就不行?后来,由于我刻苦地学习,增涨了科学文化知识,这才搞明白,原来我们的宿舍违背了“单一职责原则”。除了不是厕所,宿舍既是卧室,又是餐厅,既是书房,又是厨房,还是游戏机室兼棋牌室,甚至还兼琴房及健身房。我勒个去!你想看书,甲在看球,乙在泡面,丙在泡脚,还有一大波同学随时准备过来串门,发小广告,送外卖。所以,“看书”这个“方法”还是得放在“图书馆”这个“类&...
第一次写博客,心情无比的激动,不知道怎么样写,才能表达得通俗易懂......
前段时间接到一个需求,说要在我们的项目上面加一个扫码登录的功能,就像QQ、微信一样,我马上就上网查了一些资料,感觉和我们的系统不搭,后来经过几位大神的指点终于实现了该功能。
1、首先用你的微信绑定要登录的那个账号
扫描二维码跳转到绑定账号那个页面,注意,只能使用微信扫描,因为要授权,这个时候需要传两个参数过去,一个是guid,还有一个是你要绑定的这个账号的id,传这两个参数的意义在与,...
前段时间,接到一个需求说要搞个摇一摇优惠券,效果如下:
图一 图二 图三 &n...;
最近写爬虫时需要用到正则表达式,有段时间没有使用正则表达式现在渐渐感觉有些淡忘,现在使用还需要去查询一些资料。为了避免以后这样的情况,在此记录下正则表达式的一些基本使用方法附带小的实例。让以后在使用时能一目了然知道他的使用,为开发节约时间,同时也分享给大家。
正则元字符
在说正则表达式之前我们先来看看通配符,我想通配符大家都用过。通配符主要有星号(*)和问号(?),用来模糊搜索文件。winodws中我们常会使用搜索来查找一些文件。如:*.jpg,XXX.docx的方式,来快速查找文件。其实正则表达式和我们通配符很相似也是通过特定的字符匹配我们所要查询的内容信息。已下代码都是区分大小写。
常用元字符
代码
说明
.
匹配除换行符以外的任意字符。
\w
匹配字母或数字或下划线或汉字。
\s
匹配任意的空白符。
\d
匹配数字。
\b
...
前言
.Net推出13年了,Visual Studio 2015 / .NET Framework 4.6昨天也发布了。
从2002年的.NET 1.0开始,1.1,2.x,3.x,4.x,每个新版本的.NET都会增加新的技术,生态圈也在不断壮大。
问题
大家是否想过:
.NET究竟包含哪些技术呢?
我所掌握的技术这个子集,在.NET技术大系这个超集里面占地比例是什么呢?
我究竟还没有掌握多少.NET技术呢?
面试的时候会考哪些技术呢?
相信大家也看过Java的技术栈,一个金字塔形状的(我一下子没找回,如果你知道,烦请告诉我),包含了繁多的技术:
这些年来,看过n多.Net架构图/技术栈,搜索了很久,没有找到一个符合我要求的“较为全面”地表述.Net技术大系的图表。相信微软内部有更全面的,但可惜我没有找到。
互联网上来去都是那几个简单的按版本新增分类等10来个点的,譬如这个:
或者这个按照.NET版本新增技术的:
包括微软自家弄的.net uni...
最近在研究分布式系统架构方面的知识,包括负载均衡,数据库读写分离,分布式缓存redis等。本篇先从负载均衡服务架构入手,关于负载均衡百度百科的定义如下:负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
我的解释:一项任务交由一个开发人员处理总会有上限处理能力,这时可以考虑增加开发人员来共同处理这项任务,多人处理同一项任务时就会涉及到调度问题,即任务分配,这和多线程理念是一致的。nginx在这里的角色相当于任务分配者。
阅读目录
nginx安装
站点搭建及配置
问题分析
总结
回到顶部
nginx安装
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是...
这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座。开始了…… 我有些尴尬地拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着要进来干一场,尽管王总从事的行当也算跟IT沾边,但毕竟太长时间不接触技术,有些东西不太熟,总要咨询下我这个在一线开发混了十几年的老程序员,十几年的开发,有好几种可能性,不过这不是重点,所以暂时忽略掉这个细节吧。 我之所以尴尬,是对王总的需求有些不知如何回答,仿佛陷入了某种习惯性的沉思中。 王总站了起来,把手机递到我面前,说:“你看看,就这样一个APP。”他不太熟练地在屏幕上划了几下,我并没有很认真地看,因为我知道这个问题很难,那就是所有的开发者都会被问,并且可能是被问得最频的一个问题:“开发这么一个APP需要多长时间?”我很想说不知道,这可能是最直截了当和准确的回答,但面对王总这位老朋友,我要是这么回答估计有些失礼,所以这个时候,我除了大致思量了一下他所指的那个APP大致涉及到哪些方面之外...
上一篇介绍了如何使用nginx+iis部署一个简单的分布式系统,文章结尾留下了几个问题,其中一个是"如何解决多站点下Session共享"。这篇文章将会介绍如何使用Redis,下一篇在此基础上实现Session。
这里特别说明一下,其实没有必要使用Redis来解决Session共享。Asp.net提供了StateServer模式来共享Session,这里重复造轮子的目的1:熟悉Redis的基本知识和使用 2.学习和巩固Session的实现原理。
3.学习Redis应用场景
阅读目录
Redis安装配置
五种数据类型使用
封装拓展
总结
回到顶部
Redis安装配置
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是...
上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理。在阅读之前假设你已经会使用nginx+iis实现负载均衡搭建负载均衡站点了,这里我们会搭建两个站点来验证redis实现的session是否能共享。
阅读目录
Session实现原理
session共享实现方案
问题拓展
总结
回到顶部
Session实现原理
session和cookie是我们做web开发中常用到的两个对象,它们之间会不会有联系呢?
Cookie是什么? Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息。(Cookie 会随每次HTTP请求一起被传递服务器端,排除js,css,image等静态文件,这个过程可以从fiddler或者ie自带的网络监控里面分析到,考虑性能的化可以从尽量减少cookie着手)
Cookie写入浏览器的过程:我们可以使...
随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本。而新功能的开发又常常依赖于旧代码,阅读旧代码所花费的时间几乎要大于写新功能的代码。
我前几天看了一本书,书中有这么一句话:
“复杂的代码往往都是新手所写,只有经验老道的高手才能写出简单,富有表现力的代码”
此话虽然说的有点夸张,可是也说明了经验的重要性。
我们所写的代码除了让机器执行外,还需要别人来阅读。所以我们要写:
让别人能读懂的代码
可扩展的代码
可测试的代码(代码应该具备可测试性,对没有可测试性的代码写测试,是浪费生命的表现)
其中2,3点更多强调的是面向对象的设计原则。而本文则更多关注于局部的代码问题,本文通过举例的方式,总结平时常犯的错误和优化方式。
本文的例子基于两个指导原则:
一.DRY(Don't repeat yourself)
此原则如此重要,简单来说是因为:
代码越少,Bug也越少
没有重复逻辑的代码更易于维护,当你修复了一个bug,如果相同的逻辑还出现在另外一个地方,而你没意识到,你有没有觉得自己很冤?
...
今天在做android项目时,加入第三方包,一编译就报错。错误如下:[2012-01-13 14:51:25 - xxx] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class(org.xxx.xxx.xxx$1) that doesn't come with anassociated EnclosingMethod attribute. This class was probably produced by acompiler that did not target the modern .class file format. The recommendedsolution is to recompile the class from source, using an up-to-date compilerand without specifying any "-target" type options. The consequence of ignoringthis warning is t...