ActionHelper
/// <summary>
/// 方法帮助类
/// </summary>
public class ActionHelper
{
/// <summary>
/// 执行时间阀值
/// </summary>
public static readonly uint ElapsedMillisecondsLimit = ; /// <summary>
/// 统一计算执行时间
/// </summary>
/// <param name="action">执行方法</param>
/// <returns></returns>
public static uint ComputeActionCostMilliseconds(Action action)
{
var stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start(); // 开始监视
action();
stopwatch.Stop(); // 停止监视
var timeSpan = stopwatch.Elapsed; // 获取总时间 return (uint)timeSpan.TotalMilliseconds;
} /// <summary>
/// 统一计算执行时间
/// </summary>
/// <param name="action">执行方法</param>
/// <returns>Result.Data为执行结果。Result.Message为所消费的毫秒数</returns>
public static ActionElapseResult<T> ComputeFuctionCostMilliseconds<T>(Func<T> action)
{
var stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start(); // 开始监视
var obj = action();
stopwatch.Stop(); // 停止监视
var timeSpan = stopwatch.Elapsed; // 获取总时间 return new ActionElapseResult<T>()
{
Data = obj,
ElapsedMilliseconds = (uint)(timeSpan.TotalMilliseconds)
};
} /// <summary>
/// 统一计算执行时间并记录日志
/// </summary>
/// <param name="action">执行方法</param>
/// <param name="elapsedMillisecondsLimit">执行所消费的时间阀值(超过阀值则记录日志)</param>
/// <param name="loggerAction">日志执行方法</param>
/// <returns>Result.Data为执行结果。Result.Message为所消费的毫秒数</returns>
public static T ComputeFuctionCostMilliseconds<T>(Func<T> action, uint elapsedMillisecondsLimit, Action<uint> loggerAction)
{
return ComputeFuctionCostMilliseconds(action,
(ms) => (elapsedMillisecondsLimit == || ms > elapsedMillisecondsLimit),
loggerAction);
} /// <summary>
/// 统一计算执行时间并记录日志
/// </summary>
/// <param name="action">执行方法</param>
/// <param name="elapsedMillisecondsLimit">是否根据消费时间判断需要记录日志</param>
/// <param name="loggerAction">日志执行方法</param>
/// <returns>Result.Data为执行结果。Result.Message为所消费的毫秒数</returns>
public static T ComputeFuctionCostMilliseconds<T>(Func<T> action, Func<uint,bool> elapsedMillisecondsLimit, Action<uint> loggerAction)
{
var result = ComputeFuctionCostMilliseconds(action); var ms = (uint)(result.ElapsedMilliseconds);
if (loggerAction != null && elapsedMillisecondsLimit(ms))
{
loggerAction(ms);
} return result.Data;
}
}
java的写法
import rx.functions.Action0;
import rx.functions.Action1;
import rx.functions.Func0;
import rx.functions.Func1; /**
* RequestUtils帮忙类
*
* @author zhangjy
* @date 2017/10/19
*/
public class ActionUtils { /**
* .ctor
*/
private ActionUtils() {
} /**
* 获取当前执行方法消耗时间毫秒值
*
* @param action 执行方法
* @return 毫秒值
*/
public static long computeActionCostMilliseconds(Action0 action) {
//记录开始时间
long startTime = System.currentTimeMillis();
//此处为你调用的方法
action.call();
//记录结束时间
long endTime = System.currentTimeMillis(); return endTime - startTime;
} /**
* 获取当前执行方法消耗时间毫秒值
*
* @param action 执行方法
* @param elapsedMillisecondsLimit 消耗时间阀值(超过该值将执行loggerAction方法)
* @param loggerAction 执行方法
* @return 执行方法的返回值
*/
public static <T> T computeFuctionCostMilliseconds(Func0<T> action, int elapsedMillisecondsLimit, Action1<Long>
loggerAction) { return computeFuctionCostMilliseconds(action, ms -> ms > elapsedMillisecondsLimit, loggerAction);
} /**
* 获取当前执行方法消耗时间毫秒值
*
* @param action 执行方法
* @param elapsedMillisecondsLimitFunc 消耗时间阀值函数(该函数为True将执行loggerAction方法)
* @param loggerAction 执行方法
* @return 执行方法的返回值
*/
public static <T> T computeFuctionCostMilliseconds(Func0<T> action,
Func1<Long, Boolean>
elapsedMillisecondsLimitFunc,
Action1<Long> loggerAction) {
ActionElapseResult<T> result = computeFuctionCostMilliseconds(action); if (loggerAction != null && elapsedMillisecondsLimitFunc.call(result.getElapsedMilliseconds())) {
loggerAction.call(result.getElapsedMilliseconds());
} return result.getData();
} /**
* 获取当前执行方法消耗时间毫秒值
*
* @param action 执行方法
* @return 消费毫秒值及返回结果
*/
private static <T> ActionElapseResult<T> computeFuctionCostMilliseconds(Func0<T> action) {
//记录开始时间
long startTime = System.currentTimeMillis();
//此处为你调用的方法
T data = action.call();
//记录结束时间
long endTime = System.currentTimeMillis(); return new ActionElapseResult<>(endTime - startTime, data);
} private static class ActionElapseResult<T> {
private long elapsedMilliseconds;
private T data; private ActionElapseResult(long ms, T data) {
this.data = data;
this.elapsedMilliseconds = ms;
} private long getElapsedMilliseconds() {
return elapsedMilliseconds;
} private T getData() {
return data;
}
}
}
ActionHelper的更多相关文章
- MVC5-6 帮助类
视图帮助类 HtmlHelper HtmlHelper给我们封装了大量的常用方法,使我们的开发更具高效.那么其中有哪里是我们常用的呢? BingForm 生成form表单 上图简单的使用了Html.B ...
- Model的绑定
ReflectedControllerDescriptor:ControllerDescriptor Controller的 public override ActionDescriptor Find ...
- 一点ASP.NET MVC Html.Helper类的方法
一点ASP.NET MVC Html.Helper类 这里就只写一个Html.ActionLink()和Html.DropdownList(). Html.ActionLink()里有三个参数,第一个 ...
- data.go
{ return ErrList(errs) } return nil }
- FastJson:Json树的CRUD操作方法实现
准备工作:json字符串 [{ "id": 1, "code": "FLOW_NODE_1", "name": &quo ...
- 从零开始写JavaWeb框架(第四章节的AOP)
使用"链式代理"实现 AOP 本文是<轻量级 Java Web 框架架构设计>的系列博文. 大家是否还记得<Proxy 那点事儿>中提到的 CGLib ...
- 项目中简单使用ztree,简单数据。
由于公司架构较旧,使用的jdk版本为1.4,页面上也没有el表达式. 加入 js 文件 <% String context = request.getContextPath(); %> & ...
- Action执行时间过滤器
public class AccessStatisticsAttribute : ActionFilterAttribute { /// <summary> /// log4net 日志 ...
- SpringMVC上传文件(图片)并保存到本地
SpringMVC上传文件(图片)并保存到本地 小记一波~ 基本的MVC配置就不展示了,这里给出核心代码 在spring-mvc的配置文件中写入如下配置 <bean id="multi ...
随机推荐
- 面试题:四种Java线程池用法解析 !=!=未看
1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? 1 2 3 4 5 6 7 8 new Thread(new Runnable() { @Override ...
- pyinstaller生成exe可执行程序
1安装 略 2执行 pyinstaller –F test.py 报错: Pyinstaller: cx_Oracle.InterfaceError: Unable to acquire Oracle ...
- 简单的Cooki案例——记录用户上次访问该网页的时间
功能: 帮助网站实现提示客户端计算机上次访问网站的时间 实现原理: 将每一个会话作为一次访问过程,将每次会话的开始时间作为每次访问网站的时间,然后将这个时间以Cookie的形式存储到客户端的计算机中, ...
- Matlab和Python用于深度学习应用研究哪个好?
Matlab和Python都有一些关于深度学习的开源的解决方案(caffe\DeepMind\TensorFlow),基于哪个开展应用研究好?
- Mac OS X 下android环境搭建
安装jdk6.0版本以支持eclipse的安装 安装eclipse 安装jdk8.0版本,实际开发中用到的jdk 配置java环境变量 打开shell命令窗口(终端) 检测输入java -versio ...
- .net IAsyncResult 异步操作
//定义一个委托 public delegate int DoSomething(int count); //BeginInvoke 的回调函数 private static void Execute ...
- java中为什么要使用代理
引入代理: 我们为什么要引入java的代理,除了当前类能够提供的功能外,我们还需要补充一些其他功能. 最容易想到的情况就是权限过滤,我有一个类做某项业务,但是由于安全原因只有某些用户才可以调用这个类, ...
- html5标签兼容低版本浏览器
随着html5(后面用h5代表)标签越来越广泛的使用,IE不识别h5标签的问题让人很是烦恼. 在火狐和chrome之类的浏览器中,遇到不认识的标签,只要给个display:block属性,就能让这个元 ...
- 十五、Node.js-fs模块(中)
有了上一篇JS同步异步知识的铺垫,我们一起学习一下fs模块的同步和异步知识: Node.js内置的fs模块就是文件系统模块,负责读写文件. 和所有其它JavaScript模块不同的是,fs模块同时提供 ...
- 关于GNU规范的语法扩展
GNU 是一款能用于构建类 Unix 操作系统的计算机软件合集,由自由软件之父 Richard Stallman 开创,于 1983 年 9 月 27 日对外发布.GNU 完全由自由软件(free s ...