小编Roy*_*mir的帖子

String.Concat效率低下的代码?

我在调查String.Concat :(反射器)

在此输入图像描述

很奇怪 :

有值数组,

他们创造了一个新的阵列,以后他们会把他送到ConcatArray.

题 :

为什么他们创建了一个阵列?他们values从一开始......

编辑

代码:

public static string Concat(params string[] values)
{
    if (values == null)
    {
        throw new ArgumentNullException("values");
    }
    int totalLength = 0;
    string[] strArray = new string[values.Length];
    for (int i = 0; i < values.Length; i++)
    {
        string str = values[i];
        strArray[i] = (str == null) ? Empty : str;
        totalLength += strArray[i].Length;
        if (totalLength < 0)
        {
            throw new OutOfMemoryException();
        }
    }
    return ConcatArray(strArray, …
Run Code Online (Sandbox Code Playgroud)

c# string concatenation .net-4.0

24
推荐指数
2
解决办法
1193
查看次数

结构上的as运算符?

我不明白.该As操作:

as运算符用于在兼容引用或可空类型之间执行某些类型的转换.

那为什么以下工作呢?

struct Baby : ILive
{
    public int Foo { get; set; }

    public int Ggg() 
    {
        return Foo;
    }
}

interface ILive
{
    int Ggg();
}

void Main()
{
    ILive i = new Baby(){Foo = 1} as ILive;    // ??????
    Console.Write(i.Ggg());                    // Output: 1
}
Run Code Online (Sandbox Code Playgroud)
  • Baby是一个结构,创建它将把价值放入stack.这里没有参考.

  • 这里肯定没有可空类型.

关于我为什么错的任何解释?

.net c# casting as-operator

24
推荐指数
2
解决办法
611
查看次数

jQuery On函数用于未来元素?

$("#dataTable tbody").on("click", "tr", function(event){
    alert($(this).text());
});
Run Code Online (Sandbox Code Playgroud)

这个语法是针对已经在页面上的tr吗?

如果没有,未来tr元素的语法是什么?

jquery

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

挥发性违反其主要工作?

根据MSDN:

volatile关键字表示某个字段可能被同时执行的多个线程修改.声明为volatile的字段不受编译器优化的约束,这些优化假定由单个线程进行访问.这可确保始终在字段中显示最新值.

请注意最后一句:

这可确保始终在字段中显示最新值.

但是,此关键字存在问题.

我已经读过它可以改变指令的顺序:

First instruction       Second instruction         Can they be swapped?
Read                         Read                         No
Read                         Write                        No
Write                       Write                         No 
Write                       Read                          Yes! <----
Run Code Online (Sandbox Code Playgroud)

这意味着John为一个易变的字段设置了一个值,后来 Paul想要阅读该字段,Paul正在获得旧的价值!

这是怎么回事?这不是主要的工作吗?

我知道还有其他解决方案,但我的问题是关于volatile关键字.

我(作为程序员)是否需要阻止使用此关键字 - 因为这种奇怪的行为?

.net c# multithreading volatile thread-safety

23
推荐指数
2
解决办法
1159
查看次数

Redis的巨大文件不会删除?

我正在使用Redis-server for windows(2.8.4 - MSOpenTech)/ windows 8 64bit.

它工作得很好,但即使在我运行之后:

在此输入图像描述

我明白了:( 这是我的问题)

在此输入图像描述

题 :

- 我不是只是告诉它擦除所有数据库?那么为什么那些2/3巨大的文件仍然存在呢?我怎样才能完全删除这些文件?(不重新生成)

NB似乎它正在删除密钥而不释放占用的空间.如果是这样,我如何释放这个未使用的空间?

windows redis redis-server

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

async-await的延续突发 - 行为不同?

我有一个winform代码,点击按钮后运行:

void button1_Click(object sender, EventArgs e)
{
    AAA();
}


async Task BBB(  int delay)
{
    await Task.Delay(TimeSpan.FromSeconds(delay));
    MessageBox.Show("hello");  
}

async Task AAA()
{
    var task1 = BBB(1);  // <--- notice delay=1;  
    var task2 = BBB(1);  // <--- notice delay=1;  
    var task3 = BBB(1);  // <--- notice delay=1;  
    await Task.WhenAll(task1, task2, task3);
}
Run Code Online (Sandbox Code Playgroud)

题 :

为什么我一次看到一个MessageBox delay=1:

在此输入图像描述

但如果我改变延迟:1,2,3-

    var task1 = BBB(1);  
    var task2 = BBB(2);  
    var task3 = BBB(3);  
Run Code Online (Sandbox Code Playgroud)

我看到 - 3个消息框甚至没有点击任何消息框?

在此输入图像描述

c# winforms async-await

22
推荐指数
1
解决办法
228
查看次数

C#I/O Parallelism确实提高了SSD的性能?

我在这里读了一些答案(例如),其中一些人说并行性不会提高性能(可能在读取IO中).

但是我创建了一些测试,表明WRITE操作也要快得多.

- 阅读测试:

我用伪数据创建了随机6000文件:

在此输入图像描述

让我们尝试用w/o并行性来阅读它们:

var files =
    Directory.GetFiles("c:\\temp\\2\\", "*.*", SearchOption.TopDirectoryOnly).Take(1000).ToList();

    var sw = Stopwatch.StartNew();
    files.ForEach(f => ReadAllBytes(f).GetHashCode()); 
    sw.ElapsedMilliseconds.Dump("Run READ- Serial");
    sw.Stop(); 


    sw.Restart();
    files.AsParallel().ForAll(f => ReadAllBytes(f).GetHashCode()); 
    sw.ElapsedMilliseconds.Dump("Run READ- Parallel");
    sw.Stop();
Run Code Online (Sandbox Code Playgroud)

结果1:

运行READ- Serial 595

运行READ-Parallel 193

结果2:

运行READ- Serial 316

运行READ-Parallel 192

- 写测试:

要创建1000个随机文件,每个文件为300K.(我从prev test中清空了目录)

在此输入图像描述

var bytes = new byte[300000];
Random r = new Random();
r.NextBytes(bytes);
var list = Enumerable.Range(1, 1000).ToList();

sw.Restart();
list.ForEach((f) => WriteAllBytes(@"c:\\temp\\2\\" + Path.GetRandomFileName(), bytes)); 
sw.ElapsedMilliseconds.Dump("Run WRITE serial");
sw.Stop();

sw.Restart();
list.AsParallel().ForAll((f) => WriteAllBytes(@"c:\\temp\\2\\" …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading

22
推荐指数
4
解决办法
2916
查看次数

IStructuralEquatable vs Equals?

根据msdn

IStructuralEquatable

定义支持结构对等比较的方法.结构相等意味着两个对象是相等的,因为它们具有相等的值.它与引用相等不同,后者表示两个对象引用相同,因为它们引用相同的物理对象.

不是它什么Equals应该怎么做?(当覆盖时IEquatable)?

c# equals .net-4.0

21
推荐指数
1
解决办法
2122
查看次数

c#empty string - > null?

我有很多次输入文字,

如果它是空的(用户没有输入任何文本) - 我想发送到数据库查询"null"

不是 String.Empty.(或"")

所以我发现自己做了很多这样的事情:

var mySqlValue =  string.IsNullOrEmpty( tbCustomerId.Text)?null:tbCustomerId.Text;
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很难看.

.net为相反的场景提供了许多其他解决方案:

        string.IsNullOrEmpty
        string.IsNullOrWhiteSpace
        myProblemVal ?? myDefultVal
Run Code Online (Sandbox Code Playgroud)

我知道这可以通过扩展方法解决 - 我知道如何做到这一点..

但有什么更好的吗?

是否有任何智能代码:" if its empty -> null".

c# .net-4.0

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

为什么C#不允许字段初始化程序使用非静态字段?

为什么C#会允许这样:

public class MyClass
{
  static int A=1;
  static int B=A+1;
}
Run Code Online (Sandbox Code Playgroud)

但是不允许("字段初始值设定项不能引用非静态字段,方法或属性")这个

public class MyClass
{
   int A=1;
   int B=A+1;
}
Run Code Online (Sandbox Code Playgroud)

我认为它的 顺序是连续的初始化为它出现这是保证(静态字段),但它也应用在这里你可以看到:

public class MyClass
{
   int A=((Func<int>)(delegate(){ Console.WriteLine ("A"); return 1;}))();
   int B=((Func<int>)(delegate(){ Console.WriteLine ("B"); return 2;}))();
   int C=((Func<int>)(delegate(){ Console.WriteLine ("C"); return 3;}))();
}

void Main()
{
 var a = new MyClass();
}
Run Code Online (Sandbox Code Playgroud)

结果:

A
B
C
Run Code Online (Sandbox Code Playgroud)

我对它被限制的原因/逻辑更感兴趣.只是为了好奇.

nb没有发现任何重复.

c# language-design

21
推荐指数
2
解决办法
2556
查看次数