我陷入困境.我的代码如下:
更新:它不是关于如何使用数据缓存,我已经在使用它和它的工作,它关于扩展它所以该方法不会在到期时间之间调用和从外部源获取新数据
object = (string)this.GetDataFromCache(cache, cacheKey);
if(String.IsNullOrEmpty(object))
{
// get the data. It takes 100ms
SetDataIntoCache(cache, cacheKey, object, DateTime.Now.AddMilliseconds(500));
}
Run Code Online (Sandbox Code Playgroud)
因此,如果项目过期,用户点击缓存并从中获取数据并从服务中获取数据并保存以防万一,问题是,当有待处理的请求(请求正在进行)时,服务发送另一个请求,因为对象已过期.在最后,应该有最多2-3个呼叫/秒,并且每秒有10-20个呼叫到外部服务.
有没有最佳的方法来做到这一点所以请求时间之间没有冲突,然后创建自己的自定义类与数组和时间戳等?
顺便说一下缓存的保存代码是 -
private void SetDataIntoCache(ObjectCache cacheStore, string cacheKey, object target, DateTime slidingExpirationDuration)
{
CacheItemPolicy cacheItemPolicy = new CacheItemPolicy();
cacheItemPolicy.AbsoluteExpiration = slidingExpirationDuration;
cacheStore.Add(cacheKey, target, cacheItemPolicy);
}
Run Code Online (Sandbox Code Playgroud) 我正在制作个人WinForms应用程序.在我的场景中说我有一个C#Form1.Form1不断从互联网上获取实时Exchange数据.现在我点击一个按钮Form1然后Form2打开.现在我想从一些值Form1上Form2.
我有一个计时器Form2,可以收集数据,Form1但如何?
我曾尝试使用属性但不能这样做,因为它只更新一次,就像我们初始化Form2时一样.
有解决方案吗
另外,如果不同时创建类的两个表单,如何将它的单个实例传递给它们?
我有一个数据就像的表
userID name amount Date
1 mark 20 22-10
1 mark 30 22-10
2 kane 50 22-12
2 kane 60 22-12
3 mike 60 22-10
Run Code Online (Sandbox Code Playgroud)
使用userID +用户名+日期的组合,日期是唯一的
但由于其超过100k的记录,可能会有重复的日期记录,但其他用户ID和名称都没有
现在我想输出像
userID name amount Date
1 mark 50 22-10
2 kane 110 22-12
3 mike 60 22-10
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用ID,名称,总和(金额),日期,它返回多行并回答错误
我尝试了各种distict和SUM等组合,但没有成功任何解决方案谢谢
我有一个使用存储过程插入SQL Server数据库的记录列表.目前我这样做,但还有更好的方法吗?
我在应用程序的高峰时段每秒插入100-200行.存储过程仅获取值并插入新行
public void InsertRecords(List<stRecord> records)
{
foreach (var item in records)
{
if (CheckforDuplicateRecord(item) == false)
{
using (con = new SqlConnection(connectionString))
{
con.Open();
SqlCommand cmd = new SqlCommand(StoredProcedures.Service_Insert_record.ToString(), con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@item1", SqlDbType.NChar);
cmd.Parameters.Add("@item2", SqlDbType.NChar);
cmd.Parameters[0].Value = item.localUsername;
cmd.Parameters[1].Value = item.BetfairUsername;
try
{
cmd.ExecuteNonQuery();
}
catch (Exception exp)
{
throw exp;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)