我认为这很简单,但显然不是.我安装了一个具有私钥,可导出的证书,我想以编程方式仅使用公钥导出它.换句话说,我想要一个等效于在通过certmgr导出并导出到.CER时选择"不导出私钥"的结果.
似乎所有X509Certificate2.Export方法都会导出私钥(如果它存在),如PKCS#12,这与我想要的相反.
有没有办法使用C#来实现这一目标,还是我需要开始深入了解CAPICOM?
我觉得我应该知道答案,但无论如何我都会问,以防万一我犯了一个潜在的灾难性错误.
以下代码按预期执行,没有错误/异常:
static void Main(string[] args)
{
ManualResetEvent flag = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(s =>
{
flag.WaitOne();
Console.WriteLine("Work Item 1 Executed");
});
ThreadPool.QueueUserWorkItem(s =>
{
flag.WaitOne();
Console.WriteLine("Work Item 2 Executed");
});
Thread.Sleep(1000);
flag.Set();
flag.Close();
Console.WriteLine("Finished");
}
Run Code Online (Sandbox Code Playgroud)
当然,正如多线程代码的情况一样,成功的测试并不能证明这实际上是线程安全的.如果我Close之前提出的话,测试也会成功Set,即使文档明确指出在a之后尝试做任何事情Close都会导致未定义的行为.
我的问题是,当我调用该ManualResetEvent.Set方法时,是否保证在将控制权返回给调用者之前发出所有等待线程的信号?换句话说,假设我能够保证不会再进一步调用,在这里关闭句柄是否安全,或者在某些情况下这个代码可能会阻止一些服务员发出信号或导致一个?WaitOneObjectDisposedException
该文档仅表示Set将其置于"信号状态" - 它似乎没有任何关于服务员何时会获得该信号的声明,所以我想确定.
当涉及在事务数据库中对数据进行非规范化以提高性能时,存在(至少)三种不同的方法:
通过存储过程推送更新,存储过程更新规范化的事务数据和非规范化的报告/分析数据;
在更新辅助表的事务表上实现触发器; 这几乎总是维持历史时所采取的路线;
将处理推迟到夜间批处理过程,可能将ETL放入数据集市/仓库.
让我们假设为了这个问题的目的,选项#3是不可行的,因为域要求非规范化数据始终与规范化数据一致.我经常处理的分层聚合就是其中的一个例子.
我已经使用了前两种方法中的两种方法,最近我一直倾向于基于触发器的方法,但我想知道是否有任何"陷阱"我尚未发现,并认为它值得问这个问题所以我在将来作出长期决定时会记住一些想法.
那么根据您的经验,这两种工具的优缺点是什么,以保持实时非规范化数据的特定目的?在什么情况下你会选择一个而不是另一个,为什么?
(PS请不要回答"触发器过于复杂"或"所有更新应始终通过存储过程" - 使其适合问题的上下文.)
database triggers stored-procedures denormalization sql-server-2008
我想就我的问题提出建议.
我们正在创建一个具有以下功能的多人互联网国际象棋游戏:
客户端将是桌面Windows窗体/ wpf应用程序.我们也在考虑基于在线浏览器的版本,但我们已将其用于未来,目前我们专注于桌面版.
现在我的问题是?
任何其他建议/建议/方向也欢迎.
谢谢
我显然可以对自己进行一些有限的测试,但我希望能听到一些至少在中等规模网站上拥有实际经验的人.
每个"前10名"列表中用于优化站点/带宽的两个项目是:
现在,您可以在Google或Microsoft的CDN(或两者)上找到几乎所有重要的脚本.你甚至可以找到一些非常重量级的项目,如jQuery ThemeRoller包.在Amazon S3等私人CDN帐户上使用这些CDN的主要优点之一是许多访问者已经从其他网站缓存了这些脚本.即使他们不这样做,也很难击败像谷歌这样的网站.
因此,假设我想使用这些公共CDN,而不是为个人CDN帐户支付额外费用以获得更好或更差或相同的性能.而且我们还说我正在使用这些公共CDN上的一堆JS/CSS文件:jQuery,jquery-ui,一个主题,jQuery TOOLS,以及其他一些.除了那些我可能正在使用公共CDN上没有的几个脚本,如superfish和jquery.approach和hoverIntent.很常见的东西.看来我有两个相互排斥的选择:
这似乎是一个艰难的选择,我认为真正理解哪个更好("更好"是客户端加载时间和整体用户体验的功能)的唯一方法是实际将它放在野外,看看会发生什么.
所以,之前有人必须做出这个选择,如果是这样,你选择了什么,为什么,以及结果如何?或者,如果有人试图在孤立的环境中解决测试任务,你是怎么做的,结果是什么?
PS这就是描述"网络应用程序"类型的网站 - 换句话说,不是非常媒体密集,但可能包含大量的样式和脚本,实际上占了页面大小的一大部分.因此,我认为这不仅仅是一项智力活动.
我有一个DataTable大约有100,000条记录的ADO.NET .在此表中有一列 xyID没有值,因为该列是IDENTITY在我的SQL Server数据库中自动生成的.
我需要为其他进程检索生成的ID.我正在寻找一种方法来批量复制DataTable到SQL Server数据库,并在相同的"步骤"内"填充"我DataTable生成的ID.
如何使用SqlBulkCopy类检索插入表中的记录的标识值?
假设我创建了一个如下所示的包装类:
public class Foo : IFoo
{
private readonly IFoo innerFoo;
public Foo(IFoo innerFoo)
{
this.innerFoo = innerFoo;
}
public int? Bar { get; set; }
public int? Baz { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这里的想法是,innerFoo可能包装数据访问方法或同样昂贵的东西,我只希望它GetBar和GetBaz方法被调用一次.所以我想在它周围创建另一个包装器,它将保存第一次运行时获得的值.
当然,做到这一点很简单:
int IFoo.GetBar()
{
if ((Bar == null) && (innerFoo != null))
Bar = innerFoo.GetBar();
return Bar ?? 0;
}
int IFoo.GetBaz()
{
if ((Baz == null) && (innerFoo != null))
Baz = innerFoo.GetBaz();
return Baz ?? …Run Code Online (Sandbox Code Playgroud) 我有一个方法需要处理传入的命令序列,并根据结果的某些属性将结果拆分到不同的桶中.例如:
class Pets
{
public IEnumerable<Cat> Cats { get; set; }
public IEnumerable<Dog> Dogs { get; set; }
}
Pets GetPets(IEnumerable<PetRequest> requests) { ... }
Run Code Online (Sandbox Code Playgroud)
底层模型完全能够PetRequest一次处理整个元素序列,而且PetRequest大部分都是ID等通用信息,因此尝试在输入处拆分请求是没有意义的.但是提供者实际上并没有回馈Cat和Dog实例,只是一个通用的数据结构:
class PetProvider
{
IEnumerable<PetData> GetPets(IEnumerable<PetRequest> requests)
{
return HandleAllRequests(requests);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经命名了响应类型,PetData而不是Pet清楚地表明它不是超类Cat或Dog- 换句话说,转换为Cat或是Dog映射过程.另一件事要记住的是,HandleAllRequests价格昂贵,如数据库查询,所以我真的不想再说一遍,而且我宁愿避免使用缓存在内存中的结果ToArray()或类似的,因为可能有几千数百万的结果(我有很多宠物).
到目前为止,我已经能够把这个笨拙的黑客扔到一起:
Pets GetPets(IEnumerable<PetRequest> requests)
{
var data = petProvider.GetPets(requests);
var dataGroups …Run Code Online (Sandbox Code Playgroud) 我发现了许多关于生成UID的不同问题,但据我所知,我的要求有点独特(ha).
总结一下:我需要生成一个非常短的ID,它是"本地"唯一的,但不必是"全局"或"普遍"唯一的.约束不仅仅基于美学或空间问题,而是由于这实际上被用作硬件标签,并且这受到硬件约束的约束.以下是规格:
我知道可以使用少于12个十进制数字将时间戳编码为100 ms甚至10 ms精度,这足以保证此应用程序的"足够唯一"ID.我在这里问这个问题的原因是因为我真的想要尝试在那里加入人类可读的年/月或编码关于源机器的一些信息,或两者兼而有之.
我希望有人可以帮助在这些软性要求上做出妥协......或者解释为什么在给出其他要求的情况下它们都不可能.
(PS我的"原生"语言是C#,但如果有人有任何好主意,任何语言或甚至伪代码的代码都可以.)
更新:
既然我已经有机会在它上面睡觉了,我想我实际上要做的是默认使用时间戳编码,并允许单个安装通过定义自己的2或者切换到机器顺序ID 3位机器ID.这样,想要弄乱ID并打包在人类可读信息中的客户可以找出他们自己确保唯一性的方法,我们对滥用不负责任.也许我们通过提供服务器实用程序来帮助处理机器ID,如果它们碰巧正在进行所有在线安装.
我现在正处于升级主要交易系统中层次结构设计的最后阶段,我一直在这150行查询中盯着看(我将免除你阅读的所有单调)并认为那里必须是一个更好的方式.
该问题的快速摘要如下:
我发现了一个有点相关的问题,但它实际上只有我实际需要的答案的20%左右.这是完整的场景/规范:
hierarchyid(物化路径),索引广度优先和深度优先.每个层次结构节点/记录都有一个Name要查询的列.基于节点的层次结构查询非常快,所以不要担心这些.我的"梦想"是向用户提供即时反馈,如渐进式搜索/过滤器,但我知道这可能是不可能的或非常困难的.我对当前方法的任何重大改进感到满意,通常需要0.5s到1s,具体取决于结果的数量.
为了完整起见,现有查询(存储过程)首先收集包含最终项的所有叶节点,然后向上连接并排除其路径与先前项不匹配的任何路径.如果这对任何人来说都是落后的,那么请放心,它比从根源开始并散开更有效率.这是"旧的"方式,每次搜索可能需要几秒钟.
那么我的问题是: 是否有更好(更有效)的方式来执行此搜索?
我不一定在寻找代码,只是方法.我考虑了一些可能性,但它们似乎都有一些问题:
NamePath实际上是嵌套字符串序列的列,使用CLR类型,类似于hierarchyid它自己.问题是,我不知道微软如何能够将这种类型的查询"转换"为索引操作,我甚至不确定是否可以在UDT上进行.如果最终结果只是一个完整的索引扫描,我通过这种方法得不到任何结果.如果我不能做得比现有的更好,那真的不是世界末日; …
.net ×4
c# ×3
database ×3
ado.net ×1
algorithm ×1
architecture ×1
cdn ×1
generics ×1
hierarchy ×1
identity ×1
ienumerable ×1
iterator ×1
lazy-loading ×1
linq ×1
optimization ×1
performance ×1
search ×1
sockets ×1
sql-server ×1
sqlbulkcopy ×1
triggers ×1
unique ×1
wcf ×1