/// <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. oracle 创建表 外键约束

    create table usertable( id int primary key, username ) not null, birthday date, sex ), address ) ); ...

  2. 在CentOS6.x下安装Compiz——桌面立方体,特效种种

    很多人貌似认为compiz必须要emerland,但事实上,没这个必要. compiz+gnome,实用,而又华丽,是个不错的选择. compiz需要显卡驱动,一般情况下不成问题(别忘了这是很新的ce ...

  3. Django--model模型绑定_数据库操作

    1.创建model类 app01/models.py 1 2 3 4 5 6 7 from django.db import models   # Create your models here. c ...

  4. 类操作,removeClass&addClass

    // 添加类 function addClass(node,className){                 var reg=new RegExp("\\b"+classNa ...

  5. 《the art of software testing》第六章

    更高级别的测试 模块测试的目的是发现程序模块与其接口规格说明之间的不一致 功能测试的目的是为了证明程序未能符合其外部规格说明 系统测试目的是为了证明软件产品与其初始目标不一致 功能测试,作者从三个方面 ...

  6. Working with WordprocessingML documents (Open XML SDK)

    Last modified: January 13, 2012 Applies to: Office 2013 | Open XML This section provides conceptual ...

  7. css总结13:CSS 伪类(Pseudo-classes)

    1 伪类作用:CSS伪类是用来添加一些选择器的特殊效果. 2 常用示例: 2.1anchor伪类:代码:   正常语法: a{color:#FF0000;}/* 文字颜色 */   伪类语法: a:l ...

  8. hibernate的几个重要的类和接口

    Configuration类 该类的对象会自动加载hibernate.cfg.xml文件,同时也可以定义自己的配置文件 sessionFactory接口 由于SessionFactory是重量级的,也 ...

  9. angular 父组件调用子组件

    import { Component, OnInit, ViewChild } from '@angular/core'; @Component({ selector: 'app-child', te ...

  10. CI框架集成Smarty

    1.下载smarty源码包,解压放置于项目目录 libriaries中 2.在libraries中建立Cismarty.php ,填写如下代码 <?php if(!defined('BASEPA ...