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 ...
随机推荐
- opennebule 创建cdrom数据发送
{","csrftoken":"b9b5026f1a92180b789971ed8e21d28b"}
- 1-在eclipse里面配置python(最详细)
最近有时间打算学下python,打算学当然是得先搞好开发工具,网上搜一波,发现许多ide,居然可以在eclipse下写python,由于最近一直在搞java,所以已经装了eclipse,所以打算就在e ...
- Luogu 4213 【模板】杜教筛(Sum)
当作杜教筛的笔记吧. 杜教筛 要求一个积性函数$f(i)$的前缀和,现在这个东西并不是很好算,那么我们考虑让它卷上另外一个积性函数$g(i)$,使$(f * g)$的前缀和变得方便计算,然后再反推出这 ...
- rpmbuild SPEC语法
rpmbuild SPEC语法 摘自:http://bbs.chinaunix.net/thread-4179207-1-1.html spec文件写作规范 2008-09-28 11:52:17 分 ...
- mybatis 获得一个map的返回集合
在使用mybatis 查询结果集,有时会有需求返回一个map比如表 id username 1 name1 2 name2 3 name3 希望的查询结果是一个map 并且以id为key 表为实体 ...
- 复习HTTP状态码+301和302
一,HTTP状态码: 1xx:(信息状态码),接受的请求正在处理.2xx:(成功状态码),请求正常处理完毕.3xx:(重定向状态码),需要进行附加操作以完成请求.4xx:(客户端错误状态码),服务器无 ...
- clojure-emacs-autocomplete
1. https://github.com/clojure-emacs/cider#keyboard-shortcuts 2. install emacs 24.5 3. http://clojure ...
- linux 系统的ssh服务
ssh服务由服务端软件Openssh和客户端(常见的有ssh,SecureCRT,putty,xshell)组成,ssh服务默认使用22端口提供服务,它有两个不兼容的ssh协议版本,分别是1.x和2. ...
- 表单使用clone方法后, 原有select无法生效
textarea和select的值clone的时候会丢掉,在clone的时候将val再重新赋值一下,如果知道这个了就加单了 测试发现,textarea和select的jquery的clone方法有 ...
- WPF 控件库——带有惯性的ScrollViewer
WPF 控件库系列博文地址: WPF 控件库——仿制Chrome的ColorPicker WPF 控件库——仿制Windows10的进度条 WPF 控件库——轮播控件 WPF 控件库——带有惯性的Sc ...