小编Mar*_*ell的帖子

可以为空的GUID

在我的数据库中,在其中一个表中,我有一个GUID列,其中包含allow nulls.我有一个Guid的方法?在表中插入新数据行的参数.但是,当我说myNewRow.myGuidColumn = myGuid时,我收到以下错误:"无法隐式转换类型'System.Guid?' 到'System.Guid'."

.net c# sql-server guid nullable

27
推荐指数
4
解决办法
5万
查看次数

如何为GC.RegisterForFullGCNotification选择参数?

如果你想收到GC的通知(例如,转移收集过程中的节点之间的负载),那么你可以使用的方法,三人GC.RegisterForFullGCNotification,GC.WaitForFullGCApproachGC.WaitForFullGCComplete-然而,通过参数GC.RegisterForFullGCNotification在很大程度上似乎是毫无意义的,并没有现实世界的指导给出了如何选择合适的价值观.有模糊的音符,像从这里:

使用以下准则指定maxGenerationThreshold和largeObjectHeapThreshold参数:

阈值越大,收集可能发生的时间越远,通知越快.

较大的阈值为运行时提供了更多检查即将到来的集合的机会.这会增加您收到通知的可能性.但是,您不应将阈值设置得太高,因为这会导致在运行时导致下一个集合之前等待更长时间.

当您使用高阈值通知自己诱导集合时,将回收更多的对象,而不是运行时的下一个集合回收的对象.

阈值越小,收集更快发生的可能性越大,通知将在稍后提出.

或者从这里开始

maxGenerationThreshold 1到99之间的数字,指定何时应根据第2代中提升的对象引发通知.

largeObjectHeapThreshold 1到99之间的数字,指定何时应根据在大对象堆中分配的对象引发通知.

如果指定的值太高,则很可能会收到通知,但在运行时导致收集之前等待的时间可能太长.如果您自己引导集合,则可能会回收更多的对象,而不是运行时导致集合的回收对象.

如果指定的值太低,则运行时可能会在您有足够的时间通知之前导致收集.

然而,这并没有真正帮助我选择合理/正确的数字,除了"不太高,不太低".

目前,我只是使用少数提供的示例中的一个,即

// these are magic numbers; nobody really knows what they mean...
GC.RegisterForFullGCNotification(10, 10);
Run Code Online (Sandbox Code Playgroud)

但是......很不清楚10,10是一个正确的选择,一个任意的选择,或者我应该如何改变它以反映任何特定的使用场景.

那么:有没有正确的方法来选择这些数字?或者它是否只是反复试验,取决于我是否过早/迟到了事件?

.net garbage-collection

27
推荐指数
1
解决办法
1326
查看次数

如何从使用属性修饰的C#类生成.proto文件?

试图让我的思绪围绕谷歌protobuf.我在C#中发现了一些protobuf的实现,但它们似乎缺少一个功能:能够从使用属性修饰的现有C#类自动生成.proto文件.

我想这样做而不是从.proto文件中自动生成的C#类的原因是因为我已经在我的项目中定义了C#类,我不想复制它们只是为了满足ProtoBuf.

有没有人遇到过这种情况?


更新

这可能只是装饰一个C#类而不是使用.proto文件来使用protobuf吗?

.net c# serialization protocol-buffers protobuf-net

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

如何使用IL改变盒装结构

想象一下,我们有一个可变的struct(是的,不要开始):

public struct MutableStruct
{
    public int Foo { get; set; }
    public override string ToString()
    {
        return Foo.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用反射,我们可以获取一个盒装实例,struct并在框内变异:

// this is basically what we want to emulate
object obj = new MutableStruct { Foo = 123 };
obj.GetType().GetProperty("Foo").SetValue(obj, 456);
System.Console.WriteLine(obj); // "456"
Run Code Online (Sandbox Code Playgroud)

我会喜欢做的是写一些IL可以做同样的,因为这-但速度更快.我是一个元编程迷; p

拆箱 - 任何值并使用常规IL改变值是微不足道的 - 但是你不能只是在之后调用它,因为这将创建一个不同的框.我我们需要做的是将它复制到现有的盒子上.我已经调查了ldobj/ stobj,但那些似乎没有做到这一点(除非我遗漏了什么).

那么:是否存在这样做的机制?或者我必须限制自己反思以执行盒装structs 的就地更新?

换句话说:什么... evil goes here...

var method = …
Run Code Online (Sandbox Code Playgroud)

.net c# metaprogramming ilgenerator

26
推荐指数
2
解决办法
1119
查看次数

开关:一种情况下有多个值?

我有以下代码,但是当我输入"12"时,我仍然得到"你是一个老人".不是9 - 15号码9到15号吗?如何处理一个案例的多个值?

  int age = Convert.ToInt32(txtBoxAge.Text);

  switch (age) 

  {
    case 1 - 8:
  MessageBox.Show("You are only " + age + " years old\n You must be kidding right.\nPlease fill in your *real* age.");
    break;
    case 9 - 15:
  MessageBox.Show("You are only " + age + " years old\n That's too young!");
    break;
    case 16-100:
  MessageBox.Show("You are " + age + " years old\n Perfect.");
    break;
    default:
  MessageBox.Show("You an old person.");
    break;
  }
Run Code Online (Sandbox Code Playgroud)

c# case switch-statement

25
推荐指数
5
解决办法
12万
查看次数

C#:Dictionary的[string]索引器返回什么?

当词典中不存在键时返回的[string]索引器是什么Dictionary?我是C#的新手,我似乎找不到像Javadocs那样好的参考.

我得到了null,还是我得到了例外?

c# dictionary

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

如何枚举C#中的所有托管线程?

是否可以枚举C#中的所有托管线程?当您在调试时遇到断点时,Visual Studio似乎能够执行此操作.在"线程"窗口中,它显示所有正在运行的线程的列表,包括托管名称.有谁知道这是怎么回事?

c# multithreading

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

.NET中的TransactionScope错误?更多信息?

我已经阅读过(或者从同事那里听到)在.NET中,TransactionScope可以达到超时,然后是VoteCommit(而不是VoteRollback).这是准确还是传闻?我无法在网上找到谈论这个问题的信息(如果这是一个问题),所以我想知道是否有人有任何直接的经验,可以解决一些问题?

.net c# transactions

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

非泛型类中的泛型方法?

我确定我以前做过这个,但找不到任何例子!哎呀...

例如,我想将IList<T>a 转换为BindingList<T>:

public class ListHelper
{
    public static BindingList<T> ToBindingList(IList<T> data)
    {
        BindingList<T> output = new BindingList<T>();

        foreach (T item in data)
            output.Add(item);

        return output;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# generics

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

Monitor.Wait确保重新读取字段吗?

人们普遍接受(我相信!)a lock会强制重新加载字段中的任何值(基本上充当内存屏障或栅栏 - 我在这方面的术语有点松散,我害怕),结果那些只能在一个内部访问过的字段lock本身并不需要volatile.

(如果我错了,就说!)

这里提出了一个很好的评论,质疑如果代码执行是否也是如此Wait()- 即一旦它已经Pulse()d,它将从内存重新加载字段,还是可以在寄存器(等)中.

或者更简单:该字段是否需要volatile确保在a后恢复时获得当前值Wait()

看着反射器,Wait召唤进入ObjWait,这是managed internalcall(相同 Enter).

有问题的情景是:

bool closing;
public bool TryDequeue(out T value) {
    lock (queue) { // arbitrary lock-object (a private readonly ref-type)
        while (queue.Count == 0) {
            if (closing) {       // <==== (2) access field here
                value = default(T);
                return false;
            }
            Monitor.Wait(queue); // <==== (1) waits here
        } …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading monitor volatile

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