小编Jas*_*yon的帖子

如何管理缓存的IDisposable对象?

我有一个创建成本昂贵的对象,它使用一些必须在完成时显式释放的非托管资源,因此实现IDisposable().我想要一个缓存,例如这些昂贵的资源,以便最大限度地降低创建成本,但我很难知道如何处理这些处理.

如果使用这些对象的方法负责处理,那么我最终会在缓存中放置已处理的实例,然后必须重新创建实例,从而破坏缓存的重点.如果我没有在使用它们的方法中处理对象,那么它们永远不会被处理掉.我认为当它们从缓存中取出时我可以处理它们,但是我可能最终会处理一个仍被方法使用的实例.

让它们超出范围并由垃圾收集器收集并在那时释放资源是否有效?这感觉不对,并反对他们是一次性的想法......

.net caching idisposable

10
推荐指数
1
解决办法
1284
查看次数

是否可以将动态程序集保存到磁盘?

我最近买了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无法再在内存中找到程序集,因为我将它们输出到磁盘),因此这仅用作调试工具.

.net boo assemblies dynamic

10
推荐指数
1
解决办法
7123
查看次数

NUnit可以与.NET 3.5一起使用吗?

我刚刚开始学习单元测试(以及一般的TDD).我的问题是,最新版本的NUnit是否支持在VS2008中使用.NET 3.5?我查看了NUnit的文档页面,他们没有提到它.

如果有人在3.5中使用它,是否有任何限制或功能不起作用/需要解决方法?

nunit .net-3.5 visual-studio-2008

9
推荐指数
1
解决办法
6036
查看次数

锁定声明C#

假设我有三个需要访问集合的线程,并且我在每个线程的访问周围使用了一个锁块.发生以下情况......

(1)线程1获取集合上的锁定
(2)线程2被阻塞
(3)线程3被阻塞

当线程1释放锁定时,谁可以接下来锁定?是FIFO访问吗?

谢谢

c# locking

6
推荐指数
2
解决办法
2893
查看次数

如何防止我的服务器上的每个恶意文件上传?(检查文件类型)?

我的问题是避免用户在我的网络服务器上上传一些恶意文件.我正在研究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类型..基于扩展名-.-

php python security types file

6
推荐指数
3
解决办法
1万
查看次数

C#使用通配符复制多个文件并保留文件名

我需要使用不包含完整信息的文本文件从目录中复制多个文件.

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)

c#

6
推荐指数
2
解决办法
3万
查看次数

我需要一个便携,一致的伪随机数生成器

我正在编写一个孩子姐妹加密函数,我需要一个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)

perl prng

5
推荐指数
2
解决办法
1464
查看次数

可执行文件在Windows上以Mono内置

我知道在Windows中构建的二进制文件不需要为使用Mono的Linux机器重新编译.它是否相反?在Linux机器上使用Mono构建的二进制文件是否可以在仅使用.NET Framework的Windows上运行?

mono compatibility

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

在C#中是否可以使用在运行时生成的字段名来访问对象的字段

这就是我的意思:

我需要能够替换这个丑陋的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#中进行.

c# refactoring ref

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

随机数

在思考这个问题并与参与者交谈的过程中,提出的想法是,随机抽取一组有限的明显偏向的随机数使它们随机,因为你不知道它们的选择顺序.这是真的,如果是这样,有人可以指出一些资源吗?

编辑:我觉得我可能有点不清楚.假设一个坏的随机数发生器.取n个值.这些是有偏见的(rng很糟糕).是否有一种方法可以通过改组来使多个试验中的rng输出在统计上与已知良好的rng的输出相匹配?

random shuffle

3
推荐指数
1
解决办法
900
查看次数