gpt4 book ai didi

c# - 创建具有可重用性的 CSOM ClientContext,如单例模式

转载 作者:行者123 更新时间:2023-12-03 14:47:56 28 4
gpt4 key购买 nike

我在使用 的不同用户操作上调用了多种方法ClientContext .
在每个方法执行上创建它会导致性能问题。

因此,我将其添加为可重用性的静态变量,性能平均提高了 5 秒,但随后在某些方法中它开始给出 的随机问题。 “版本冲突” ExecuteQuery() .
但是如果我删除静态和空检查,那么它每次都会刷新并且性能成为一个问题

有什么方法可以创建这个或至少不是每次调用的一个时间对象?
ClientContext 的默认过期时间是多少?

ClientContext对象创建代码:

    public class SPConnection
{
public static ClientContext SharepointClientContext { get; set; }
public static ClientContext GetSharePointContext()
{
try
{
if (SharepointClientContext == null)
{
string appId = System.Configuration.ConfigurationManager.AppSettings["appId"];
string appSecret = System.Configuration.ConfigurationManager.AppSettings["appSecret"];
string siteUrl = System.Configuration.ConfigurationManager.AppSettings["siteUrl"];

var authManager = new OfficeDevPnP.Core.AuthenticationManager();
using (ClientContext clientContext = authManager.GetAppOnlyAuthenticatedContext(siteUrl, appId, appSecret))
{
SharepointClientContext = clientContext;
return clientContext;
}
}
else
return SharepointClientContext;
}
catch (Exception ex)
{
iChange.Web.API.Authentication.SPConnection.InsertRecordToTableErrorLog("Mucebat:"+ex.Message, ex.StackTrace.ToString());
throw ex;
}

}

使用它的方法之一的代码:
    public bool UpdateProfilePic(updateprofilepicmodel model)
{
using (ClientContext context = SPConnection.GetSharePointContext())
{
List list = context.Web.Lists.GetByTitle("Members");
ListItemCreationInformation info = new ListItemCreationInformation();
ListItem item = list.GetItemById(model.MemberId);

item["ProfilePicture"] = model.ProfilepicUrl;
item.Update();
context.ExecuteQuery();
return true;
}

}

最佳答案

您可以尝试使用 ExecuteQueryAsync与异步任务相结合以提高性能?例如

     public async Task <bool> UpdateProfilePic(updateprofilepicmodel model)
{
using (ClientContext context = SPConnection.GetSharePointContext())
{
List list = context.Web.Lists.GetByTitle("Members");
ListItem item = list.GetItemById(model.MemberId);
context.Load(item);
Task t1 = context.ExecuteQueryAsync();
await t1.ContinueWith((t) =>
{
item["ProfilePicture"] = model.ProfilepicUrl;
item.Update();
Task t2 = context.ExecuteQueryAsync();
});

await t2.ContinueWith((t) =>
{
// do some stuff here if needed
});

return true;
}
}

P.S:我没有测试过这段代码,但如果这对你有用

关于c# - 创建具有可重用性的 CSOM ClientContext,如单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60353928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com