小编Mic*_*lGG的帖子

lambda每次调用时都会创建一个新实例吗?

我很想知道Lambda(当用作委托时)是否会在每次调用时创建一个新实例,或者编译器是否会找到一种方法来实例化该委托只有一次并传入该实例.

更具体地说,我想为XNA游戏创建一个API,我可以使用lambda来传递自定义回调.由于这将在Update方法中调用(每秒调用很多次),如果它每次都新建一个实例以传递委托,那将是非常糟糕的.

InputManager.GamePads.ButtonPressed(Buttons.A, s => s.MoveToScreen<NextScreen>());
Run Code Online (Sandbox Code Playgroud)

c# lambda xna garbage-collection

5
推荐指数
1
解决办法
844
查看次数

使用VB.NET的ASP.NET中的AES

什么是使用AES加密URL链接以使用VB.NET 2005将用户名传递到ASP.NET中的另一个网站的好链接或文章?仅供参考:接收网站将有权访问私钥以进行解密.

asp.net encryption cryptography aes

4
推荐指数
1
解决办法
2万
查看次数

Uniqueidentifier PK:SQL Server堆是正确的选择吗?

好.我已经在这里和那里读过关​​于SQL Server堆的东西,但没有什么太明确的真正指导我.我将尝试衡量绩效,但希望能就我应该研究的内容提供一些指导.这是SQL Server 2008 Enterprise.以下是表格:

工作

  • JobID(PK,GUID,外部生成)
  • StartDate(datetime2)
  • 帐户ID
  • 几个会计字段,主要是小数和bigints

JobSteps

  • JobStepID(PK,GUID,外部生成)
  • JobID FK
  • 开始日期
  • 几个会计字段,主要是小数和bigints

用法:大量插入(数百/秒),每个作业通常为1个JobStep.估计每月可能有100-200M行.根本没有更新,唯一的删除来自3个月以前的归档数据.

对数据执行~10次查询/秒.有些人将JobSteps加入乔布斯,有些人只看乔布斯.几乎所有查询都在StartDate上,其中大多数包括AccountId和一些其他会计字段(我们有它们的索引).查询非常简单 - 执行计划的最大部分是JobSteps的连接.

优先级是插入性能.有些滞后(大约5分钟左右)可以容忍数据出现在查询中,因此复制到其他服务器并运行查询肯定是允许的.

除了将JobSteps加入Jobs之外,基于GUID的查找非常罕见.

当前设置:没有聚集索引.唯一一个似乎是候选者的是StartDate.但是,它并没有完美地增加.可以在StartDate后的3小时窗口中将作业插入任何位置.这可能意味着按照非最终的顺序插入了一百万行.

使用我当前索引的1 Job + 1 JobStepId的数据大小约为500字节.

问题:

  • 这是一个很好用的堆?

  • 群集在StartDate上有什么影响,当它几乎是非连续的~2小时/ 100万行?我的猜测是不断的重新排序会杀死插入性能.

  • 我是否应该添加bigint PK只是为了拥有更小,总是增加的密钥?(我仍然需要guid进行查找.)

我将GUID作为PRIMARY KEYs和/或集群键读取,它似乎表明即使发明密钥也会在其他索引上节省大量空间.另外一些资源表明堆通常存在某种性能问题,但我不确定它是否仍然适用于SQL 2008.

再次,是的,我将尝试进行测试和测量.我只是想获得一些指导或链接到其他文章,这样我就可以考虑哪些路径做出更明智的决定.

sql sql-server indexing performance sql-server-2008

4
推荐指数
1
解决办法
985
查看次数

CoTaskMemAlloc v malloc v AllocHGlobal

我在Windows上看过,malloc与CoTaskMemAlloc不同,后者与AllocHGlobal不同.对于C#使用者来说,这可能意味着如果我有一个返回malloc指针的C函数,我需要在其上调用free.如果IP/Invoke并指定字符串返回类型,则CLR应该调用CoTaskMemFree并且应该在malloc指针上失败.

但是,我无法在实践中看到这一点.我创建了一个DLL,它只返回一个malloc'd char*和P/Invoked它作为一个字符串.没有内存泄漏.实际上,无论我尝试什么,我都无法让事情失败.我调用malloc,GlobalHAlloc,CoTaskMemAlloc,然后使用任何免费的实现,只是工作.没有内存泄漏.重新使用相同的内存空间.

我怎么能强迫它失败?或者这是那些应该是"实现定义"的东西,但实际上只是单向工作?

这是在VS2015 Update 2,Windows 8.1上.

c c# pinvoke winapi

2
推荐指数
1
解决办法
1098
查看次数

如何在特定地址创建SQLite内存数据库

我想使用 SQLite 在文件中存储一些元数据信息。该文件已经进行了 mmap。我想要做的是创建一个 SQLite DB,传入一个 char* 来告诉它在哪里创建 DB,而不是让它分配自己的 DB。这可以做到吗?内存数据库的 SQLite 文档只是说使用“:内存:”,并且数据库将在进程结束时被销毁,没有指示如何使用已经存在的数据或保留它。

如果没有,Linux 上有哪些解决方法?是否有“反向”mmap,以便我可以获取地址并将其映射到新文件?(那么 /foo 将是 /bar 的一部分的视图?)

sqlite mmap ramdisk in-memory-database

0
推荐指数
1
解决办法
2142
查看次数