简道云

简道云是一个零代码轻量级应用搭建平台,旨在满足企业/部门的个性化管理需求。拥有表单、流程、仪表盘、知识库等核心功能。通过拖拉拽的操作方式,让企业快速搭建出符合自身需求的管理应用。简道云的灵活使用有助于企业规范业务流程、促进团队协作、实现数据追踪!

简道云拥有表单、流程、仪表盘、知识库等核心功能。支持使用者在钉钉、企业微信、飞书、微信等移动端接收简道云消息、处理相关业务,进行数据的录入、查询、共享、分析等操作。表单中提供丰富的表单字段及属性,可根据业务场景及逻辑灵活定义业务规则,搭建出属于符合企业需求的应用场景:如员工档案、签到签退、报名登记等。流程中能够自定义流程节点,同时可以为每个流程添加负责人,结合待办等消息提醒,轻松实现多种复杂流程的业务场景:如报销申请、周报审批、家电等。提供丰富的图表及组件,分析收集到的数据,并对数据进行多维度、实时展示。同时提供 10 种实用仪表盘样式,辅助决策管理。

Task t = ...;
using (var cts = new CancellationTokenSource())
{
    if (await Task.WhenAny(Task.Delay(timeout, cts.Token), t) != t)
    {
        throw new TimeoutException();
    }

    cts.Cancel();
    await t;
}

在知识库中,可以建立起企业内部专属的知识管理体系,梳理业务资料,沉淀业务知识,制定业务规范,让团队的业务更进一步。能够根据业务场景的不同,对不同角色、部门的员工开放不同的使用权限,充分保证企业知识的安全性与合理性。针对企业的复杂业务,提供实用的高级功能,如 API,打通简道云与企业其他管理系统的数据,实现数据的无缝衔接。

JNPF开发平台,是一个以PaaS为核心的零代码开发平台,是一个集PC和APP快速开发、系统管理、流程引擎、权限管理、数据报表、可视化数据源管理与数据构建、数据动态生成与统计、工作流、智能表单设计、微服务等全方位功能于一体的高效、稳定的快速开发平台。

支持表格的数据自动存入数据库,集中存储;支持EXCEL和国产WPS表格,也支持ESWEB网页浏览器的应用方式;结合ECharts图例实现数据可视化;支持基于多维数据库的OLAP分析;支持基于关系数据库无需建模的多维分析。

public void CreateTokenDispose()
{
    using (var cts = new CancellationTokenSource())
        _ = cts.Token;
}

[Benchmark]
public void CreateRegisterDispose()
{
    using (var cts = new CancellationTokenSource())
        cts.Token.Register(s => { }, null).Dispose();
}

[Benchmark]
public void CreateLinkedTokenDispose()
{
    using (var cts = CancellationTokenSource.CreateLinkedTokenSource(_source.Token))
        _ = cts.Token;
}

[Benchmark(OperationsPerInvoke = 1_000_000)]
public void CreateManyRegisterDispose()
{
    using (var cts = new CancellationTokenSource())
    {
        CancellationToken ct = cts.Token;
        for (int i = 0; i < 1_000_000; i++)
            ct.Register(s => { }, null).Dispose();
    }
}

企业数字化转型进程中,对ERP、CRM等方面的规范优化涉及企业核心架构变革和对大量关键信息数据的处理,必须高度保障风险的可控性,实现数字化系统的自主可控。

private CancellationTokenSource _source = new CancellationTokenSource();

[Benchmark]
public void CreateTokenDispose()
{
    using (var cts = new CancellationTokenSource())
        _ = cts.Token;
}

[Benchmark]
public void CreateRegisterDispose()
{
    using (var cts = new CancellationTokenSource())
        cts.Token.Register(s => { }, null).Dispose();
}

[Benchmark]
public void CreateLinkedTokenDispose()
{
    using (var cts = CancellationTokenSource.CreateLinkedTokenSource(_source.Token))
        _ = cts.Token;
}

[Benchmark(OperationsPerInvoke = 1_000_000)]
public void CreateManyRegisterDispose()
{
    using (var cts = new CancellationTokenSource())
    {
        CancellationToken ct = cts.Token;
        for (int i = 0; i < 1_000_000; i++)
            ct.Register(s => { }, null).Dispose();
    }
}

[Benchmark(OperationsPerInvoke = 1_000_000)]
public void CreateManyRegisterMultipleDispose()
{
    using (var cts = new CancellationTokenSource())
    {
        CancellationToken ct = cts.Token;
        for (int i = 0; i < 1_000_000; i++)
        {
            var ctr1 = ct.Register(s => { }, null);
            var ctr2 = ct.Register(s => { }, null);
            var ctr3 = ct.Register(s => { }, null);
            var ctr4 = ct.Register(s => { }, null);
            var ctr5 = ct.Register(s => { }, null);
            ctr5.Dispose();
            ctr4.Dispose();
            ctr3.Dispose();
            ctr2.Dispose();
            ctr1.Dispose();
        }
    }
}