- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于一些静态方法,我意识到在操作过程中使用一个小数组来临时存储值是非常方便的。所述数组很有用,因为您需要索引,但每次调用该方法时都会分配那个小数组。
这是解决 C# 中缺少类 C 静态局部变量的好方法吗?
[ThreadStatic]private static int[] staticregister = new int[4];
public static bool CoolStaticMethod(int[] largearray)
{
//...
}
我的假设是一个不能直接(递归)或间接调用自身的方法只能在单个线程中单独调用,因此假静态本地应该声明为线程静态,问题更大解决了。
编辑:
我必须补充一点,寄存器的内容在方法调用之间是垃圾。
最佳答案
这不是我所说的好的解决方法,不是。它会工作(假设您确定重入风险,即不调用自身,即使是通过意外事件/回调/等) - 但是......
在我的看来,它是有状态的,让它成为一个实例:
private int[] register = new int[4];
public bool CoolMethod(int[] largearray) {...}
并为每个上下文简单地使用 WheverTheTypeIs
的不同实例,即实例充当作为上下文。如果您想要每个线程的上下文,只需为每个线程使用不同的实例。这也允许在相同上下文中继续使用回调、并行、worker 等。请注意,有许多框架不保证单线程(例如 WCF、ASP.NET、WPF),并且随着 5.0 引入更多 async
/await<,这种情况只会增加
面向代码。
如果您对静态方法有很深的依赖,将 register
作为第二个参数传递也足够了:
public static bool CoolStaticMethod(int[] largearray, int[] register) {...}
如果问题是 4 字节数组的分配:
stackalloc
和unsafe
来避免分配以“2”为例:
public static unsafe bool CoolStaticMethod(int[] largearray)
{
// not an array! this is raw data on the stack; DO NOT GO OUT OF BOUNDS!
int* register = stackalloc int[4];
register[0] = 1;
register[1] = largearray[3];
largearray[2] = register[0];
....
}
关于c# - 使用 threadstatic 静态字段模拟函数静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8023770/
我正在使用 if(Thread.IsAlive) 检查线程的状况。该线程中正在运行一个表单。有时在执行过程中,即使窗体保持打开状态,对 Thread.IsAlive 的调用似乎评估为 false。我想
This question让我想到了 .NET 等价物。 ThreadState 有什么值(value)? Thread类的属性?在此代码示例中: if (someThread.ThreadState
我有以下代码。这可能是个愚蠢的问题,但我不确定是否需要同步。 class MyClass { [ThreadStatic] private static object _staticObjec
我们有一个相当大的现有代码库,用于构建在 ASP.NET 之上的各种网络服务,该代码大量使用访问 HttpContext.Current.User(包装为 Client.User ),我相当确定它在内
[ThreadStatic] 属性如何工作?我假设编译器会发出一些 IL 来填充/检索 TLS 中的值,但查看反汇编时它似乎并没有在那个级别执行它。 作为后续,如果你把它放在一个非静态成员上会发生什么
[线程静态] 私有(private)静态 Foo _foo; 公共(public)静态 Foo CurrentFoo { 得到 { 如果(_foo == null){ _foo = new Foo()
我们的 WCF 服务引用的库之一使用 ThreadStatic 变量。服务方法在每次调用开始时设置它的值。我想知道这是否安全——换句话说,我们能否保证只有一个线程专门用于整个调用?或者是否有可能调用可
对于一些静态方法,我意识到在操作过程中使用一个小数组来临时存储值是非常方便的。所述数组很有用,因为您需要索引,但每次调用该方法时都会分配那个小数组。 这是解决 C# 中缺少类 C 静态局部变量的好方法
有没有一种优雅的方法可以知道工作线程何时执行完毕,以便我可以访问它产生的资源? 例如,如果工作线程使用查询 SQL Server 列表 ServersSqlDataSourceEnumerator.I
我有一个需要几秒钟加载的表单。因此,我想显示一个带有文本“正在加载,请稍候”的小表格。表单加载完成后,必须关闭加载表单。 所以,我做了一个简单的类,它在线程中显示加载表单: public class
是否有可能根据 Thread 引用获取该线程的 ThreadStatic 值? 最佳答案 不,那是不可能的。与此类属性一样,[ThreadStatic] 属性被抖动识别。它生成对 CLR 的调用以获取
当我使用 ThreadStatic 属性探索线程和任务时,我遇到了一些奇怪的事情。我相信这可能非常特定于线程和任务。考虑以下代码片段: [ThreadStatic] static int range=
开始编辑 执行此操作的“正确”方法(4.5 之前)是使用此处概述的 SynchronizationContext:http://msdn.microsoft.com/en-us/magazine/gg
[ThreadStatic()]是什么意思 我得到了一段代码,我找到了[ThreadStatic()]在那里使用是什么意思....何时使用[ThreadStatic()] public class C
调用前: th.Abort(); 如何等待 ThreadState 变为 ThreadState.Abort 然后执行某些操作?可能吗? 最佳答案 您可以调用 Thread.Join() (MSDN)
ThreadStatic attribute将静态变量声明为每个线程唯一。您知道正确处理此类变量的简单模式吗? 我们在ThreadStatic之前使用的是一个ThreadContextManager。
怎么会像ThreadStatic在 TPL 任务中使用?我的理解(“Wrox Professional Parallel Programming with C#”,第 74 页)是任务可以在执行期间从
我想了解单例模式设计。我想从我的单例类中为每个线程创建单独的实例。所以我在下面提供了两种设计。 正在运行 class Program { static void Main(string[] a
我有一个我编写的日志记录框架,它能够跟踪“日志记录上下文”。它有一个可插入的策略框架,但我最常使用的是一个 ThreadStatic 变体,它在 [ThreadStatic] 中跟踪上下文。多变的。我
我正在阅读 tips and tricks发布,我想我会尝试一些我以前从未做过的 C# 东西。因此,下面的代码没有任何实际用途,只是一个“测试函数”,看看会发生什么。 无论如何,我有两个静态私有(pr
我是一名优秀的程序员,十分优秀!