更新于2014年11月18日 - 在浏览log4net源存储库时,我发现LogicalThreadContext的实现在2011年11月被修改为使用CallContext.LogicalSetData存储其属性(并使用LogicalGetData获取它们).这很重要,因为这意味着LogicalThreadContext现在应该可以正常工作.存储在LogicalThreadContext中的任何数据都应"流向"任何子线程或任务.这与ThreadContext(以及LogicalThreadContext的旧实现)相比较,其中存储在上下文中的数据将保持在当前线程的本地,而不是流向子线程/任务.
如果您有兴趣,可以参考以下内容:
希望有人发现这个老问题会发现这些信息很有用.
log4net提供了两个不同的"线程上下文"对象:ThreadContext和LogicalThreadContext,每个对象 都有一个属性包.ThreadContext有一个ThreadContextProperties包,而LogicalThreadContext有一个LogicalThreadContextProperties包.
ThreadContext可能更常被称为"MDC".LogicalContext可能更常被称为"LDC".我会在这篇文章的其余部分使用短名称.
MDC.Properties使用System.Threading.Thread.SetData实现,而LDC.Properties使用System.Runtime.Remoting.Messaging.CallContext.SetData实现.
为了进行比较,NLog仅公开"MDC"(现在称为MappedDiagnosticContext)来存储线程本地属性.NLog的实现使用System.Threading.Thread.SetData,因此它的实现与log4net相同.
在log4net和NLog中,"MDC"属性存储在字典中,该字典本身存储在线程本地存储中.
在这样的情况下,将字典存储在用[ThreadStatic]装饰的类成员变量中是否相同?
[ThreadStatic]
private static IDictionary<string, string> threadProperties;
Run Code Online (Sandbox Code Playgroud)
什么是使用.NET 4.0的新ThreadLocal类的等效(或类似)声明?
最终,LDC和MDC之间真正的,实际的差异是什么?即使在阅读了上面链接的MSDN主题之后,我也不清楚.你什么时候真的使用一个而不是另一个?似乎我在log4net和上下文中看到的绝大多数引用/示例都是针对GDC(全局 - 我理解),NDC(嵌套 - 我也理解)和MDC.我在google搜索时可以找到LDC(或LogicalThreadContext)的大多数引用都与登录到log4net源代码库有关,而不是真实世界的用法.最不发达国家几乎从未提出问题或例子.
我确实找到了这个链接,提供了一些关于与log4net开发人员之一Nicko Cadell的差异的非常好的信息,但我仍然不清楚.
一个更大的问题,与log4net没有直接关系的是Thread.SetData和CallContext.SetData之间的实际区别是什么?
根据CallContext MSDN文章,CallContext数据可以传播到另一个AppDomain.要传播,存储在CallContext中的数据项必须公开ILogicalThreadAffinative接口.所以,这似乎是Thread.SetData和CallContext之间的一个区别.
根据Nicko Cadell链接,log4net不实现ILogicalThreadAffinative,因此不会传播LDC属性.
也许这里有足够的东西我应该能够回答我自己的问题,也许不是.我还在努力理解.
如果你使用log4net,你们每个人都使用MDC,LDC吗?如果你使用MDC,是因为大多数"真实世界"的例子似乎都在使用它吗?如果你使用LDC,你有特定的理由使用它吗?如果你同时使用它们,你如何选择何时使用哪个?
请注意,我已经看到一些关于MDC(也许是LDC)的文章可能因为线程切换而无法在ASP.net应用程序中正常工作.我对这个问题不是特别感兴趣,因为我不在ASP.net工作.
实际上,我在SO上发现了一些可能有助于讨论的有用帖子:
提前致谢!
我已经在网上阅读了入门文档和其他一些示例.这就是我的search_indexes.py看起来像:
from haystack.indexes import *
from haystack import site
from models import Entry
class EntryIndex(SearchIndex):
text = CharField(document=True)
headline = CharField(model_attr='headline')
subheadline = CharField(model_attr='subheadline')
category = CharField(model_attr='category__name')
author = CharField(model_attr='get_author')
email = CharField(model_attr='get_email')
tags = CharField(model_attr='tags')
content = CharField(model_attr='content')
def get_queryset(self):
return Entry.objects.exclude(dt_published=None).order_by('-is_featured', '-dt_published', '-dt_written', 'headline')
site.register(Entry, EntryIndex)
Run Code Online (Sandbox Code Playgroud)
但是当我搜索时,我没有得到任何结果.奇怪的是,如果我使用搜索短语'a'或任何其他单个字母,我会得到看起来像该死的东西中的每一个条目.
无论如何......在我看来,搜索引擎并没有在任何领域寻找.:/
这条线以下的任何东西都不太相关(它有效,相信我):
我的看法:
from haystack.views import SearchView
class CustomSearchView(SearchView):
def __name__(self):
return "CustomSearchView"
def extra_context(self):
return common(self.request)
def search(request):
return CustomSearchView(template='news/search_results.html')(request)
Run Code Online (Sandbox Code Playgroud)
和search_results.html:
{% extends "content.html" %}
{% load tagging_tags %}
{% …Run Code Online (Sandbox Code Playgroud) 我有可能在我自己的网站上发布一个Android应用程序,而不是使用Android市场.该应用程序用于我们的互联网软件服务,因此仅为了我们现有的客户的利益.
第二个问题是,我可以在安装后安装我的应用程序更新,还是必须使用市场来完成该任务?
我有一个带有DIV元素的网页.当用户点击"打印"时,我想打印该div的内容.请注意,我只想打印DIV的内容,而不是整个页面.为了尝试这个,我决定使用JavaScript打开一个新窗口.然后我将把DIV的内容写入新窗口.我的问题是,这可能与JQuery有关吗?如果是这样,怎么样?目前,我正在尝试以下方法:
function printClick() {
var w = window.open();
var html = $("#divToPrintID").html();
// how do I write the html to the new window with JQuery?
}
Run Code Online (Sandbox Code Playgroud) 无法从程序集"Microsoft.SqlServer.DTSRuntimeWrap,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91"加载类型"Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSPackageSigning100"
快速提问,有没有人知道如何以编程方式使textField中的文本变为粗体或斜体?
@property(nonatomic, retain) IBOutlet UITextField *textField_TOP_01;
[textField_TOP_01 setTextColor:[UIColor redColor]];
[textField_TOP_01 setText:@"This text is bold"];
Run Code Online (Sandbox Code Playgroud)
非常感激
加里
我试图用haml编写这个html,以便在项目是当前项目时添加id标记.这是为jquery突出显示设置.
<% if line_item == @current_item %>
<tr class="line_item id="current_item">
<% else %>
<tr class="line_item">
<% end %>
<td><%= line_item.quantity %>×</td>
<td><%= line_item.product.title %></td>
<td class="item_price"><%= number_to_currency(line_item.total_price) %></td>
</tr>
Run Code Online (Sandbox Code Playgroud)
因为我不想编写辅助方法,所以我将if语句粘贴在标记中:
%tr.line_item{ :id => (line_item == @current_item ? '' : 'current_item') }
%td
= line_item.quantity
%td
\x #{line_item.product.title}
%td.item_price
= number_to_currency(line_item.total_price)
%td.item_remove
= button_to 'Remove', line_item, :method => :delete
Run Code Online (Sandbox Code Playgroud)
但是,'current_item'的这个id标签包含所有项目而不仅仅是当前项目.这导致javascript突出显示所有或错误的条目.关于如何让haml合作的想法?
我正在使用预览来显示相机在屏幕上看到的内容.
我可以使一切工作正常,表面创建,表面设置和表面显示.
但是,在纵向模式下,它始终以不正确的90度角显示图像.
如图中所示:

我知道使用以下代码将直接设置图片:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)
但是我在Activity中有预览,其中包含其他元素,并且我的Activity在横向模式下显示没有意义.(默认禁用)
所以我想知道是否只是改变预览的方向?并在"纵向"模式下正确显示我的其余活动?
或者无论如何旋转预览以便正确显示?
实际上,每当我播放一个文本文件(大多数是em)时,我都会从git gui(我使用msysgit)获取消息,它用CRLF替换(或即将)行结尾.显然我想要它(并且有一个设置为huraah),但我不希望这些烦人的消息一直出现!
有什么办法保持设置,但关闭/禁用弹出消息?
我不知道如何在命令行上使用GIT,但我喜欢msysgit的暂存过程:)所以我宁愿不改为bash.
当rootViewController我的应用程序的加载,我希望能够检查用户是否登录凭据已保存到NSUserDefaults.
基本上,当用户加载应用程序并且他/她没有保存她的登录凭证时,modalAlertView将推送,并且用户将能够适当地保存他们的凭证.这会将这些UITextField字符串保存到相应的NSUserDefault对象.但是,有可能,当这个保存完成后,我可以创建NSUserDefault一个布尔值的对象并将值更改为是吗?
这意味着布尔值已经设置为no,并且当用户保存其登录凭据时,它还将布尔值更改为是?
iphone boolean objective-c nsuserdefaults modalviewcontroller