我有一种方法,该方法基于某些参数在给定字符串列表的两个日期之间查找“交易”。当列表 > 1000 时,我在尝试迭代列表时遇到堆栈溢出异常。
这是我的代码
public List<string> CodesWithTransactionsBetweenDates(DateTime startInclusive, DateTime endExclusive, List<string> associatedCodes, int marketId)
{
List<string> codesWithTransactionsInPeriod = new List<string>();
using (var context = new MarketPlaceEntities())
{
var transactionList = (from transactions in context.Transactions
where
associatedCodes.Contains(transactions.User.Code) &&
transactions.MarketId == marketId &&
transactions.Date >= startInclusive &&
transactions.Date < endExclusive
group transactions by transactions.User.Code into uniqueIds
select new { UserCode = uniqueIds.Key });
foreach (var transaction in transactionList)
{
codesWithTransactionsInPeriod.Add(transaction.UserCode);
}
return codesWithTransactionsInPeriod;
}
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪......它超过了visual studio可以处理的点。
System.Data.Entity.dll!System.Data.Query.InternalTrees.BasicOpVisitor.VisitChildren(System.Data.Query.InternalTrees.Node n) + 0x3 …Run Code Online (Sandbox Code Playgroud) 功能
int compare(const void* a, const void* b)
{
SomeDataType g1 = *(static_cast<SomeDataType*>(a));
SomeDataType g2 = *(static_cast<SomeDataType*>(b));
g1.firstelement < g2.firstelement ? 1 : -1;
}
Run Code Online (Sandbox Code Playgroud)
此代码返回一个错误,指出"静态强制转换无法从const void*强制转换为SomeDataType*".我使用const_cast之类的
SomeDataType g1 = *(static_cast<SomeDataType*>(const_cast<void*>(a))) ;
Run Code Online (Sandbox Code Playgroud)
让这个工作.这是一种正确的方法吗?或者我错过了什么?我不太明白这是如何工作的.
我正在为开源 MMO 游戏构建登录服务。我对安全/加密方面的了解不多,我正在寻找一种解决方案,该解决方案可以为黑客提供良好的保护,并且生成成本不能太高。
我们的旧系统使用非常简单的身份验证系统,将密码作为 SHA1 存储在数据库中。对于我们的新服务,我们希望通过用户第一次登录时生成的身份验证令牌进行身份验证,并且在整个会话期间都有效。一个简单的随机生成的字符串是否就足够了,还是我应该查看一些更复杂的东西来保证它的安全?
在SQL Server表中,我有一个DateTime字段,每次外部Web服务登录失败时,我都会将当前的DateTime写入表中.
我目前有代码解析返回并确定在5分钟内是否有> 2次失败.如果是这样,我有一个标志来关闭调用Web服务.我很好奇是否有一种方法可以使用sql来返回当前时间内5分钟内的行数?