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 ...
随机推荐
- Mybatis和Hibernate比较
作者:乌拉拉链接:http://www.zhihu.com/question/21104468/answer/58579295来源:知乎著作权归作者所有,转载请联系作者获得授权. 1.开发对比开发速度 ...
- vs2017不是完全支持c99
1.比如c99里面有一个特性, int count[]={0,[5]=7,9,10} 这种在VS2017里面是编译不通过的.; 2.c99有一个变长数组的概念(VLA),但是vs2017不支持.
- IntelliJ IDEA——利用maven插件构建web工程
- JavaWeb中的路径问题
JavaWEB 开发中的 / 的含义 ①.当前WEB应用的根路径(http://localhost:8080/contextPath/) 请求转发时:request.getRequestDispath ...
- Asp.NET中把DataTable导出为Excel ,中文有乱码现象解决办法
//DataTable为要导出的数据表 DataGrid dg = new DataGrid(); dg.DataSource = DataTable; ...
- (转)C# HTML解析示例---星星引发的血案
原文地址:http://www.cnblogs.com/wurang/archive/2013/06/14/3119023.html [前言] 从CSDN转投cnBlog也有一段时间了,发现cnBlo ...
- MATLAB读取写入文本数据最佳方法 | Best Method for Loading & Saving Text Data Using MATLAB
MATLAB读取文件有很多方法.然而笔者在过去进行数据处理中,由于函数太多,相互混杂,与C#,Python等语言相比,反而认为读取文本数据比较麻烦.C#和Python等高级语言中,对于大部分的文本数据 ...
- 使用IneliJ IDEA 2016将Java Web项目导出为War包
本文记录使用IDEA导出war包的过程以及碰到问题的解决办法 虽说现在改用IDEA进行开发了,但还是用eclipse打war包 -.囧 这样下去不是办法... 于是今天就试着使用IDEA进行打包. 项 ...
- vs2010 does not have a strong name
处理步骤: C:\myWorkSpace\IECG Dev. Tool\Forklift\DbUpgraderDLL\bin\Debug 为dll 所在目录 DbUpgraderDLL.dll为dll ...
- 以太坊系列之十二: solidity变量存储
solidity中变量的存储 变量存储主要分为两个区域,一个是storage(对应指定是SLOAD,SSTORE),一个是Memory(MLOAD,MSTORE), 这和普通编程语言的内存模型是不一样 ...