首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Simple.OData.Client真的很慢

Simple.OData.Client真的很慢
EN

Stack Overflow用户
提问于 2018-06-26 12:41:06
回答 1查看 1.6K关注 0票数 0

我正在使用Simple.OData.Client查询和更新我们的客户关系管理动态系统。但每次查询、插入或更新都需要10秒。它对邮递员的作用就像一种魅力。这意味着服务器不是问题所在。

这是我的密码:

基类

代码语言:javascript
复制
 public abstract class CrmBaseDao<T> where T : class
{
    protected ODataClient GetClient()
    {
        return new ODataClient(new ODataClientSettings(BuildServiceUrl())
        {
            Credentials = new NetworkCredential(Settings.Default.CrmUsername, Settings.Default.CrmPassword),
            IgnoreUnmappedProperties = true
        });
    }

    public async Task<IEnumerable<T>> GetAll()
    {
        var client = GetClient();
        return await client.For<T>().FindEntriesAsync();
    }

    private string BuildServiceUrl()
    {
        return Settings.Default.CrmBaseUrl + "/api/data/v8.2/";
    }
}

派生类:

代码语言:javascript
复制
    public void Insert(Account entity)
    {
        var task = GetClient()
            .For<Account>()
            .Set(ConvertToAnonymousType(entity))
            .InsertEntryAsync();

        task.Wait();

        entity.accountid = task.Result.accountid;
    }

    public void Update(Account entity)
    {
        var task = GetClient()
             .For<Account>()
             .Key(entity.accountid)
             .Set(ConvertToAnonymousType(entity))
             .UpdateEntryAsync();

        task.Wait();
    }

    private object ConvertToAnonymousType(Account entity)
    {
        return new
        {
            entity.address1_city,
            entity.address1_fax,
            entity.address1_line1,
            entity.address1_postalcode,
            entity.address1_stateorprovince,
            entity.he_accountnumber,
            entity.name,
            entity.telephone1,
            entity.telephone2
        };
    }

    public async Task<Account> GetByHeAccountNumber(string accountNumber)
    {
        return await GetClient().For<Account>()
            .Filter(x => x.he_accountnumber == accountNumber)
            .FindEntryAsync();
    }

呼吁:

代码语言:javascript
复制
 private void InsertIDocsToCrm()
    {
        foreach (var file in GetAllXmlFiles(Settings.Default.IDocPath))
        {
            var sapAccountEntity = GetSapAccountEntity(file);
            var crmAccountEntity = AccountConverter.Convert(sapAccountEntity);

            var existingAccount = crmAccountDao.GetByHeAccountNumber(crmAccountEntity.he_accountnumber);
            existingAccount.Wait();

            if (existingAccount.Result != null)
            {
                crmAccountEntity.accountid = existingAccount.Result.accountid;
                crmAccountDao.Update(crmAccountEntity);
            }
            else
                crmAccountDao.Insert(crmAccountEntity);
        }
    }

整个功能需要很长时间(30 sec+)才能加快速度吗?

另外,这真的需要很多记忆?!

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 10:38:01

我怀疑这可能与模式的大小有关。我将跟踪您在GitHub上打开的问题。

最新消息。我运行了一些模拟服务器响应的基准测试,Simple.OData.Client内部的处理只需几毫秒。我建议您在服务器端运行基准测试。还可以尝试将元数据文件引用分配给ODataClientSettings的ODataClientSettings属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51043200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档