我有一个创建成本昂贵的对象,它使用一些必须在完成时显式释放的非托管资源,因此实现IDisposable().我想要一个缓存,例如这些昂贵的资源,以便最大限度地降低创建成本,但我很难知道如何处理这些处理.
如果使用这些对象的方法负责处理,那么我最终会在缓存中放置已处理的实例,然后必须重新创建实例,从而破坏缓存的重点.如果我没有在使用它们的方法中处理对象,那么它们永远不会被处理掉.我认为当它们从缓存中取出时我可以处理它们,但是我可能最终会处理一个仍被方法使用的实例.
让它们超出范围并由垃圾收集器收集并在那时释放资源是否有效?这感觉不对,并反对他们是一次性的想法......
我最近买了Ayende的书,在Boo中构建DSLs(买它,读它,它真棒)但是我遇到了一个实现问题,我想看看生成的代码是什么样的.我通常会使用反射器来查看代码,但在这种情况下,程序集是动态的,只在内存中.有没有办法将动态程序集保存到磁盘,以便我可以反映它们?
编辑/我的答案:
哇,花了一段时间才回到这个.不幸的是,我从原来的问题中留下了一点重要的一点.
重要的一点:我正在使用Ayende的RhinoDSL库,正如他在书中所建议的那样.我可以访问我的DslEngine子类中的boo编译器,如下所示:
public class JobEngine : DslEngine
{
protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
{
pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
}
}
Run Code Online (Sandbox Code Playgroud)
要改变最少并获得我想要的东西我需要添加一行...
public class JobEngine : DslEngine
{
protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
{
compiler.Parameters.GenerateInMemory = false; // <--- This one.
pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
}
}
Run Code Online (Sandbox Code Playgroud)
这导致编译器将程序集输出到我的〜\ LocalSettings\Temp目录,然后我可以反映它.重要的是要注意,进行该更改会导致程序的其余部分中断(RhinoDSL无法再在内存中找到程序集,因为我将它们输出到磁盘),因此这仅用作调试工具.
我刚刚开始学习单元测试(以及一般的TDD).我的问题是,最新版本的NUnit是否支持在VS2008中使用.NET 3.5?我查看了NUnit的文档页面,他们没有提到它.
如果有人在3.5中使用它,是否有任何限制或功能不起作用/需要解决方法?
假设我有三个需要访问集合的线程,并且我在每个线程的访问周围使用了一个锁块.发生以下情况......
(1)线程1获取集合上的锁定
(2)线程2被阻塞
(3)线程3被阻塞
当线程1释放锁定时,谁可以接下来锁定?是FIFO访问吗?
谢谢
我的问题是避免用户在我的网络服务器上上传一些恶意文件.我正在研究linux环境(debian).
实际上上传是通过这段代码通过PHP处理的:
function checkFile($nomeFile, $myExt = false){
if($myExt != false){ $goodExt = "_$myExt"."_"; }else{ $goodExt = "_.jpg_.bmp_.zip_.pdf_.gif_.doc_.xls_.csv_.docx_.rar_"; }
$punto = strrpos($nomeFile, '.');
$ext = "_".substr($nomeFile, $punto, 8)."_";
if(stristr($goodExt, $ext)){ return 1; }else{ return 0; }
}
Run Code Online (Sandbox Code Playgroud)
在这里我可以指定允许上传的扩展名,如果文件不符合他们,我会在上传完成后立即删除.但这样一来,用户可以通过简单的重命名来自由更改文件扩展名......这对我不利; 即使file.exe(例如)如果在file.jpg中重命名也不会被执行(我是对吗?),我不希望在我的服务器上有潜在的危险文件.
有一种方法,在php,python或whatelse中,unix系统可以轻松运行,以检查文件的真正类型吗?
我已经尝试了python mimetypes模块,但它检索文件的ipotetical mime类型..基于扩展名-.-
我需要使用不包含完整信息的文本文件从目录中复制多个文件.
NCR.txt:
红色
目标目录中包含:
red1.txt
red3.txt
red44.txt
dest目录需要有:
red1.txt
red3.txt
red44.txt
我的代码:
System.IO.Directory.CreateDirectory(@"C:\nPrep\" + textBox1.Text + "\\red");
if (checkBox3.Checked)
{
String[] file_names = File.ReadAllLines(@"C:\NCR.txt");
foreach (string file_name in file_names)
{
string[] files = Directory.GetFiles(textBox2.Text, file_name + "*.txt");
foreach (string file in files)
System.IO.File.Copy(file, @"C:\nPrep\" + textBox1.Text + "\\red\\");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个孩子姐妹加密函数,我需要一个PRNG,它可以在OS上产生一致的结果(所以没有浮点数学,利用硬件或系统级软件).如果PRNG的持续时间超过2 30,这将是一件好事,但并非必要.
我目前正在使用32位Xorshift:
#!/usr/bin/perl
use strict;
use warnings;
{
use integer; #use integer math
my $x = 123456789;
my $y = 362436069;
my $w = 88675123;
my $z = 521288629;
sub set_random_seed {
$w = shift;
}
sub random {
my $t = $x ^ ($x << 11);
$x = $y;
$y = $z;
$z = $w;
my $rand = $w = ($w ^ ($w >> 19)) ^ ($t ^ ($t >> 8));
return $rand …Run Code Online (Sandbox Code Playgroud) 我知道在Windows中构建的二进制文件不需要为使用Mono的Linux机器重新编译.它是否相反?在Linux机器上使用Mono构建的二进制文件是否可以在仅使用.NET Framework的Windows上运行?
这就是我的意思:
我需要能够替换这个丑陋的C#代码:
if (attribute.Name == "Name") machinePool.Name = attribute.Value;
else if (attribute.Name == "Capabilities") machinePool.Capabilities = attribute.Value;
else if (attribute.Name == "FillFactor") machinePool.FillFactor = attribute.Value;
Run Code Online (Sandbox Code Playgroud)
进入这样的事情:
machinePool.ConvertStringToObjectField(attribute.Name) = attribute.Value;
Run Code Online (Sandbox Code Playgroud)
没有ConvertStringToObjectField()方法,但我希望有这样的东西,如果可能的话.我可以访问machinePool对象类代码,所以我可以添加必要的代码,但我不确定它可能是什么代码,或者甚至可以在C#中进行.
在思考这个问题并与参与者交谈的过程中,提出的想法是,随机抽取一组有限的明显偏向的随机数使它们随机,因为你不知道它们的选择顺序.这是真的,如果是这样,有人可以指出一些资源吗?
编辑:我觉得我可能有点不清楚.假设一个坏的随机数发生器.取n个值.这些是有偏见的(rng很糟糕).是否有一种方法可以通过改组来使多个试验中的rng输出在统计上与已知良好的rng的输出相匹配?