小编tig*_*ars的帖子

从内存流读取到字符串

我正在尝试将对象写入Xml字符串并获取该字符串并将其保存到数据库中.但首先我需要得到字符串......

    private static readonly Encoding LocalEncoding = Encoding.UTF8;

    public static string SaveToString<T> (T settings)
    {
        Stream stream = null;
        TextWriter writer = null;
        string settingsString = null;

        try
        {
            stream = new MemoryStream();

            var serializer = new XmlSerializer(typeof(T));

            writer = new StreamWriter(stream, LocalEncoding);

            serializer.Serialize(writer, settings);

            var buffer = new byte[stream.Length];

            stream.Read(buffer, 0, (int)stream.Length);

            settingsString = LocalEncoding.GetString(buffer);
        }
        catch(Exception ex)
        {
            // If the action cancels we don't want to throw, just return null.
        }
        finally
        {
            if (stream != null) …
Run Code Online (Sandbox Code Playgroud)

c# memorystream xml-serialization xmlserializer

38
推荐指数
4
解决办法
12万
查看次数

32位和64位Windows之间的日期时间粒度

我已经为一些网络调试创建了一个小工程应用程序.它需要一个IP地址列表并对其进行ping操作,并设置用户设置的超时和速率.它记录了平均往返时间,每当其中一个发送失败时,它会记录它的失败持续时间和发生时间的时间戳...

这就是主意.我是在带有.Net4的Win7机器上开发的,并且不得不把它放在一套XP笔记本电脑上.

问题是测试期间我的盒子上的持续时间值显示了漂亮的ms持续时间,在XP盒子上,当我看起来它们显示0或15.625(幻数?)...并且在字符串中有滑稽的方框,符号?

    public void LinkUp()
    {
        if (_isLinkUp) return;

        _upTime = DateTime.Now;
        var span = _upTime.Subtract(_downTime);
        _downTimeLog.Add(new LinkDown()
                            {
                                _span = span,
                                _status = _ipStatus,
                                _time = _downTime
                            });
        _isLinkUp = true;
    }
Run Code Online (Sandbox Code Playgroud)

这就是日志的作用._ipStatus是ping失败原因(通常是超时).

    _downEventLog.AppendLine("  Duration-> " + linkDownLogEvent._span.TotalMilliseconds + "ms\n");
Run Code Online (Sandbox Code Playgroud)

这就是印刷品的一点......任何人都可以对这种明显的差异有所了解吗?

问题已经得到解答,但我会在这里添加一个编辑以获取更多信息.

编辑:

似乎差异不是Win7和WinXP的差异,而是32位和64位.

Henk指出的32位Windows系统中,系统时钟的粒度为15-16ms,这对于时间跨度小于16ms的每个值都给出了15.625的值.

在64位系统中,系统调用是针对具有更精细粒度的不同方法集.所以在x64的开发机器上,我的系统时钟精度为ms!

现在,秒表通过处理器仪器使用硬件接口来记录更精细的粒度(可能不是每个处理器滴答,但我想象一些与这种想法一致的极其准确的东西).如果操作系统下的硬件没有这种级别的检测,则会使用系统时间.所以要小心!但我猜大多数现代台式机/笔记本电脑都有这种仪器......嵌入式设备或那种性质的东西可能没有,但就我所见,秒表类不在Compact Framework中(这里你必须使用QueryPerformanceCounter( )).

希望这一切都有帮助.这对我帮助很大.

在_spanStopWatch初始化器周围的某处:

    if (!_spanStopWatch.IsHighResolution)
    {
        throw new ThisMachineIsNotAccurateEnoughForMyLikingException("Find a better machine.");
    }
Run Code Online (Sandbox Code Playgroud)

螺母和螺栓:

    public void LinkUp()
    {
        if (_isLinkUp) return;

        _spanStopWatch.Stop();
        var span = _spanStopWatch.Elapsed;
        _downTimeLog.Add(new LinkDown() …
Run Code Online (Sandbox Code Playgroud)

c# datetime timespan x86-64 stopwatch

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

为什么要以块的形式写入Stream?

我想知道为什么这么多的例子将字节数组读入chucks中的流而不是一次性...我知道这是一个软问题,但我很感兴趣.

我理解一点硬件和填充缓冲区可能是非常依赖于大小的,你不想再次写入缓冲区,直到它被刷新到需要去的地方等等...但是使用.Net平台(和其他)现代语言)我看到两者的例子.那么当使用哪个和什么时候,或者是第二个绝对不是没有?

这是我的意思(代码):

var buffer = new byte[4096];

while (true)
{
    var read = this.InputStream.Read(buffer, 0, buffer.Length);

    if (read == 0)
        break;

    OutputStream.Write(buffer, 0, read);
}
Run Code Online (Sandbox Code Playgroud)

而不是:

var buffer = new byte[InputStream.Length];

var read = this.InputStream.Read(buffer, 0, buffer.Length);

OutputStream.Write(buffer, 0, read);
Run Code Online (Sandbox Code Playgroud)

我相信两者都合法吗?那么为什么要经历所有关于while循环的大惊小怪(无论你决定如何构建它)?

我在这里玩恶魔倡导者,因为我想尽可能多地学习:)

c# meta stream point-of-interest

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

是否将c#6.0 nameof()结果实现了?

从我可以读到的编译器只发出一个字符串,没有其他真正发生?

有没有理由说这次电话会议的结果无法实现?对于a nameof(MyClass),如果它发生了很多,它理论上可能值得吗?

c# string-interning c#-6.0 nameof

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

bacpac 还原到 SQL Server 的内存使用情况

我刚刚将.bacpac文件恢复到本地 SQL Server 实例 (64b v12.0.4213),备份来自 azure sql 实例。

由于 OOM 异常,它失败了几次。我关闭了机器上的所有内容,在恢复结束时,SQL Server 服务实例消耗了 700MB 文件中的 13GB 内存!

幸运的是,恢复完成了,但似乎内存没有被释放/垃圾收集。当我写这篇文章时,它的内存仍然是 12GB。

这是一个已知问题吗?有什么方法可以恢复.bacpac并选择要忽略的表吗?您可以通过正常的数据恢复来完成此操作,最令人反感的表是 dbo.[Logs] 表、obvs。

sql-server ssms data-tier-applications azure-sql-database

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

F#使用构造函数作为函数

我有一个用例来处理派生类型的构造函数作为委托,我无法弄清楚它是不可能的,或者我只是无法解决它.

type SomeJobEvent(jobId : int, otherThing : string) =
    member this.JobId = jobId
    member this.OtherThing = otherThing

type SomeJobStarted(jobId : int, otherThing : string) =
    inherit SomeJobEvent(jobId, otherThing)

type SomeJobComplete(jobId : int, otherThing : string) =
    inherit SomeJobEvent(jobId, otherThing)

type SomeJobError(jobId : int, otherThing : string) =
    inherit SomeJobEvent(jobId, otherThing)
Run Code Online (Sandbox Code Playgroud)

让我们想象一下这就是模型,在现实生活中,模型恰好在C#中,我的代码在F#中,但为了简洁起见,在F#中输入更容易.

而我想要做的是......

let raise eventObject = 
    // This is just a helper, the raise event takes obj.
    eventRaiser.Raise(eventObject)

let raise jobId otherThing eventConstructor = 
    // Lets treat the 'event' constructor …
Run Code Online (Sandbox Code Playgroud)

f# constructor delegates downcast

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

C#比较两个列表

背景:我有两个包含字符串的列表.列出a和列表b.目前,我将excel电子表格中的List a的值写入A列,将List b的值写入Column.列表b应与列表a具有相同的数据并按顺序排列.这并非总是如此.

问题:当我在excel中写入List b的值时,我想在单元格中写入值,如果它在同一点的列表a中,如果不是,我想在单元格中写入一个空字符串.

编辑:感谢回复和答案工作得很好,只是意识到我真正需要的是:

如果两个列表是:

a = {"a", "b", "c", "d", "e" }
b = {"a", "d", "e" }
Run Code Online (Sandbox Code Playgroud)

操作的结果应该是:

{ "a", "", "", "d", "e" }
Run Code Online (Sandbox Code Playgroud)

c# excel list

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

为每个域对象创建actor

我一直在尝试使用带有a的路由器ConsistentHashingPool来动态创建actor以基于对象id消费消息,在这个简单的例子中,它是一个唯一的字符串.

我想要一个每个域聚合的演员,这似乎是一个非常简单的方法.

但是哈希似乎做了奇怪的事情并向已经从不同哈希映射值产生的actor发送消息.

ActorSystem.ActorOf(
    Props.Create(() => new MyAggergateActor()).WithRouter(
        new ConsistentHashingPool(10)
        .WithHashMapping(o => (o as MyEvent)?.MyAggregateUniqueId ?? string.Empty)
        .WithResizer(new DefaultResizer(1, int.MaxValue))), 
    "myAggregateRouter");
Run Code Online (Sandbox Code Playgroud)

同样调整值nrOfInstances似乎也会破坏事物,这意味着哈希可能只适用于初始实例集并且没有新的actor被生成?我认为缩放器应该在这里帮助我?

请原谅任何天真,我刚刚开始使用Akka.

routing akka.net

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