正如标题所示,我感兴趣的是静态类在.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) 由于 Blazor 让我们为客户端开发构建代码,我想知道是否有可能访问相机、联系人等的本机设备 API?
我查看了一些文档,包括这个
https://learn.microsoft.com/en-us/aspnet/core/blazor/javascript-interop?view=aspnetcore-3.0
但是,我找不到任何答案
免责声明 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) 我遇到了通过Citrix服务器在远程位置运行的应用程序的问题.当应用程序在远程位置运行时,即使用户通过Citrix访问应用程序,它也会使用远程位置的时间将事件记录到数据库.
.NET的DateTime.Now是否以某种方式"逃离"Citrix容器并找到远程计算机的时间或是否有其他解释?
这是应用程序的当前设置.
PS应用程序已更新,以便在将来保存时从数据库中查询时间.
我正在为一个项目进行单元测试,但我无法弄清楚如何让 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#中,公共嵌套类和私有嵌套类之间有什么区别?你什么时候用另一个经文?
据我所知,他们在类的视图中具有相同的可访问性,它们嵌套在任何外部类中.
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# ×5
.net ×1
asp.net ×1
blazor ×1
citrix ×1
ienumerable ×1
internals ×1
linqpad ×1
nsubstitute ×1