小编nin*_*der的帖子

什么时候.NET中的静态类加载到内存中?

正如标题所示,我感兴趣的是静态类在.NET中加载到内存中,尤其是C#.我认为这是类似于这一问题在Java和这个问题有关的静态方法,在加载它使用它的第一次.另外,一旦它在内存中,它会一直存在,直到应用程序终止,或者当垃圾收集器出现清理使用它的类时,它会被清理干净吗?

我意识到静态类使用的少量内存在具有8 + GB RAM标准的计算机世界中并不是非常重要,但了解内部结构总是很有趣.

编辑:

答案让我想要在这个问题上添加更多内容并通过一个例子来澄清.如果我理解正确,在下面的示例中,Contraption.SomeString将首先放在内存中,然后紧跟Contraption.AnotherString,第一次通过循环.

public static class Contraption
{
    public static string SomeString = "Some String";
    public static string AnotherString = "Another String";
}

public class Processor
{
    public void Process(List<SomeClass> items)
    {
        foreach(var item in items)
        {
            if(item.Name == Contraption.SomeString)
            {
                //do something
            }
            if(item.Name == Contraption.AnotherString)
            {
                //do something
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# internals

5
推荐指数
1
解决办法
3897
查看次数

是否可以使用 Blazor 访问本机手机或设备 API 来访问相机、联系人等?

由于 Blazor 让我们为客户端开发构建代码,我想知道是否有可能访问相机、联系人等的本机设备 API?

我查看了一些文档,包括这个

https://learn.microsoft.com/en-us/aspnet/core/blazor/javascript-interop?view=aspnetcore-3.0

但是,我找不到任何答案

asp.net blazor

5
推荐指数
1
解决办法
3786
查看次数

线程是否仍在运行或者只是 LINQPad?

免责声明 1:我理解多线程的概念,但我仍然不知道正确的实现。

免责声明 2:我根本不是在批评 LINQPad,因为它太棒了。我只是想知道我是否遗漏了一些东西。

Console.WriteLine("Completed");给出下面的代码,调用时线程是否仍在运行?

我问这个问题是因为当我在 LINQPad 中运行时,我在右下角看到Press Ctrl+Shift+F5 to cancel all thread ,但是,当我通过 VS 运行与控制台应用程序相同的代码时,它似乎终止了。我完全有可能没有正确使用任务和/或没有正确终止它们。

public class TaskRunner
{
    public async void RunTasks()
    {
        CancellationTokenSource cts = new CancellationTokenSource();
        CancellationToken ct = cts.Token;

        Task loadingTask =
            new Task(() =>
                {
                    //do something that takes a while, ie. database or service call
                    for (int i = 0; i < 10; i++)
                    {
                        Thread.Sleep(100);
                        Console.WriteLine("Loading");
                    }
                });

        Task entertainmentTask =
            new Task(() =>
                {
                    //do …
Run Code Online (Sandbox Code Playgroud)

c# multithreading linqpad

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

.NET DateTime是否访问主机时间或虚拟机时间?

我遇到了通过Citrix服务器在远程位置运行的应用程序的问题.当应用程序在远程位置运行时,即使用户通过Citrix访问应用程序,它也会使用远程位置的时间将事件记录到数据库.

.NET的DateTime.Now是否以某种方式"逃离"Citrix容器并找到远程计算机的时间或是否有其他解释?

这是应用程序的当前设置.

  • 应用程序将事件记录到美国的数据库中
  • 远程用户位于欧洲,通过Citrix访问应用程序,模拟在美国运行应用程序
  • Citrix服务器计算机时间设置为美国时间

PS应用程序已更新,以便在将来保存时从数据库中查询时间.

c# citrix

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

在 NSubstitue 中使用 IEnumerable 设置参数匹配器

我正在为一个项目进行单元测试,但我无法弄清楚如何让 NSubstitute 按照我期望的方式工作。我遇到的问题是我要替换的代码在 while 循环中,并且根据替换值返回的内容确定循环是否继续。

我想做的是让 Process() 根据传入的内容返回不同的结果。我试过了

api.Process(Arg.Is<IEnumerable<int>>(new[] {1,2,3}, Arg.Any<bool>()).Returns(new ProcessingResult(){Success = true, IdsNotProcessed = List<int>{30}});
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用,因为 processingResult 返回 null 因为 NSubstitue 与参数不匹配。

    [Test]
    public void TestTwoLoops()
    {
        var api = Substitute.For<IApi>();
        api.Process(/*list containing 1,2,3*/, Arg.Any<bool>()).Returns(new ProcessingResult(){Success = true, IdsNotProcessed = List<int>{30}});
        api.Process(/*list containing 30*/, Arg.Any<bool>()).Returns(new List<int>{});

        var sut = new WidgetMaker(api);

        sut.MakeWidget();
    }

    public class WidgetMaker
    {
        public WidgetMaker(IApi api)
        {
            _api = api;
        }

        public void MakeWidgets(IEnumerable<int> widgetIds)
        {
            var idsToProcess = widgetIds.ToList();

            while(true)
            {
                if(!idsToProcess.Any())
                { …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable nsubstitute argument-matching

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

C#中公共嵌套类和私有嵌套类之间的区别是什么

在C#中,公共嵌套类和私有嵌套类之间有什么区别?你什么时候用另一个经文?

据我所知,他们在类的视图中具有相同的可访问性,它们嵌套在任何外部类中.

void Main()
{
    Item i = new Item();
    i.DoSomething();

    GizmoBuilder gb = new GizmoBuilder();//class not accessible
    WidgetBuilder wb = new WidgetBuilder();//class not accessible
}

public class Item
{
    public int Id { get; set; }

    private string ItemName { get; set;}

    public void DoSomething()
    {
        GizmoBuilder g = new GizmoBuilder();
        g.BuildGizmo();
        Console.WriteLine(g.BuildId);
        Console.WriteLine(g.Name);//g.Name not accessible

        WidgetBuilder w = new WidgetBuilder();
        w.BuildWidget();
        Console.WriteLine(w.BuildId);
        Console.WriteLine(w.Name);//g.Name not accessible
    }

    public class GizmoBuilder
    {
        public int BuildId { get; set; }

        private …
Run Code Online (Sandbox Code Playgroud)

c# inner-classes

0
推荐指数
1
解决办法
238
查看次数