/// <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的更多相关文章

  1. MVC5-6 帮助类

    视图帮助类 HtmlHelper HtmlHelper给我们封装了大量的常用方法,使我们的开发更具高效.那么其中有哪里是我们常用的呢? BingForm 生成form表单 上图简单的使用了Html.B ...

  2. Model的绑定

    ReflectedControllerDescriptor:ControllerDescriptor Controller的 public override ActionDescriptor Find ...

  3. 一点ASP.NET MVC Html.Helper类的方法

    一点ASP.NET MVC Html.Helper类 这里就只写一个Html.ActionLink()和Html.DropdownList(). Html.ActionLink()里有三个参数,第一个 ...

  4. data.go

    {         return ErrList(errs)     }     return nil }

  5. FastJson:Json树的CRUD操作方法实现

    准备工作:json字符串 [{ "id": 1, "code": "FLOW_NODE_1", "name": &quo ...

  6. 从零开始写JavaWeb框架(第四章节的AOP)

    使用"链式代理"实现 AOP   本文是<轻量级 Java Web 框架架构设计>的系列博文. 大家是否还记得<Proxy 那点事儿>中提到的 CGLib ...

  7. 项目中简单使用ztree,简单数据。

    由于公司架构较旧,使用的jdk版本为1.4,页面上也没有el表达式. 加入 js 文件 <% String context = request.getContextPath(); %> & ...

  8. Action执行时间过滤器

    public class AccessStatisticsAttribute : ActionFilterAttribute { /// <summary> /// log4net 日志 ...

  9. SpringMVC上传文件(图片)并保存到本地

    SpringMVC上传文件(图片)并保存到本地 小记一波~ 基本的MVC配置就不展示了,这里给出核心代码 在spring-mvc的配置文件中写入如下配置 <bean id="multi ...

随机推荐

  1. mvc json 日期问题的最简单解决方法

    1.首先编写BaseController这个类,需要引入Newtonsoft.Json.dll程序集 using System;using System.Collections.Generic;usi ...

  2. ASP.NET Web Pages (Razor) FAQ

    ASP.NET Web Pages (Razor) FAQ By Tom FitzMacken|February 7, 2014 Print   This article lists some fre ...

  3. ORACLE_EBS_R12_采购到入库所经历的表

    --采购到入库所经历的表 --0.请购单 --创建请购单方式有 --a.从外挂系统导入请购的接口表PO_REQUISITIONS_INTERFACE_ALL,并允许请求(名称:导入申请) SELECT ...

  4. delphi计算两个时间差

    uses DateUtils; var S1, S2: string; T1, T2: TDateTime; D, H, M, S: Integer; Value: Int64; begin S1 : ...

  5. 关于 ASP.NET 的 CompilationMode="Never" 性能问题

    今天在优化系统性的时候,想到了 ASP.NET 里的 CompilationMode="Never", 因为用户控件里没有任何代码, 只有控件,把用户控件的编译模式改为 Never ...

  6. C#多线程编程实战1.4终止线程

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  7. The 'microsoft.jet.oledb.4.0' provider is not registered on the local machin

    1,2选取目标站点,然后3的高级设置,4启用32位的应用程序的属性变为true就可以了.当然,网络上还有其他的版本,你也可以尝试下. 原文地址:http://weblogs.asp.net/kenco ...

  8. Java读写配置文件prop.properties

    Java读写配置文件prop.properties @Test public void fun() throws IOException{ Properties prop=new Properties ...

  9. plantix插件工具,eclipse工具

    代码修改后部署流程: 修改代码-->自动构建工作空间(将修改的代码或配置文件复制到classes文件夹)-->发布到tomcat环境中-->重启服务器运行 常见报错:java.lan ...

  10. Size Assertion

    Size Assertion每一个响应包含的字节大小,可以设置大小等于,大于,小于,不等于给定的字节数. Apply to:应用范围,一般勾选Main samle only即可. Response S ...