假设我有一个类Foo,它有一个名为Count的静态成员变量(类型为整数).此变量用于多线程应用程序,我在对此变量进行任何读/写操作之前使用锁同步机制.正如我正在阅读本文的易失性我得到的印象是我可以删除围绕此变量的所有锁定,并在声明此变量时使用volatile关键字.这应该照顾所有与synchnronization相关的东西.它是否正确?这种方法的优缺点是什么?
我有一个.NET winform应用程序,需要在安装过程中注册本机DLL.我的问题是如何在MSI安装过程中注册一个DLL(regsvr32 ABC.dll)?类似如何取消注册dll作为卸载过程的一部分?
如果我有进程转储文件,是否知道转储是在 x64 机器还是 x86 机器上生成的?
我是WCF的新手,所以请说明你是否发现了我在这里完全错误的事情.我创建了一个WCF服务项目(我的服务类是从ServiceBase类中提取的),端点地址绑定设置为basicHttpBinding.现在我需要创建一个可以从此服务调用某些API的客户端应用程序.我的问题是,在我的客户端应用程序中,如何添加对该服务的服务引用.我是否需要首先在IIS下发布此服务(这意味着我也必须在计算机上使用IIS),或者是否还有其他一些添加服务引用的方法.
我有一个 WCF 服务,它公开了一个具有以下签名的方法
bool MyMethod(string MyParam1, string MyParam2, out string MyParam3)
Run Code Online (Sandbox Code Playgroud)
但是当我添加服务引用时,代理类更改参数顺序如下
bool MyMethod(out string MyParam3, string MyParam1, string MyParam2)
Run Code Online (Sandbox Code Playgroud)
它把 param 作为第一个参数。知道为什么会这样吗,或者可能是我做错了什么?
我与原生dll交互的.NET进程抛出OutOfMemory异常.以下是!address -summary和--eeheap-gc coammands.这是否意味着它是管理泄漏还是原生泄漏?
0:000>!address -summary
ProcessParametrs 002f10a8,范围002f0000 003f0000
环境002f07f0,范围002f0000 003f0000
--------------------使用摘要--------------------------
TotSize( KB)Pct(Tots)Pct(Busy)用法
17773000(384460):18.33%22.25%:RegionUsageIsVAD
168aa000(369320):17.61%00.00%:RegionUsageFree
110fe000(279544):13.33%16.18%:RegionUsageImage
395fe000(940024):44.83 %54.41%:RegionUsageStack 396000
(3672):00.18%00.21%:RegionUsageTeb
7540000(120064):05.73%06.95%:RegionUsageHeap
0(0):00.00%00.00%:RegionUsagePageHeap
1000(4):00.00%00.00%:RegionUsagePeb
0 (0):00.00%00.00%:RegionUsageProcessParametrs
0(0):00.00%00.00%:RegionUsageEnvironmentBlock
Tot:7fff0000(2097088 KB)忙:69746000(1727768 KB)
--------------------类型摘要--------------------------
TotSize( KB)Pct(Tots)用法
168aa000(369320):17.61%:
15970000(353728):16.87%:MEM_IMAGE
47e9000(73636):03.51%:MEM_MAPPED
4f5ed000(1300404):62.01%:MEM_PRIVATE
--------------------状态摘要--------------------------
TotSize( KB)Pct(Tots)用法
303e1000(790404):37.69%:MEM_COMMIT
168aa000(369320):17.61%:MEM_FREE
39365000(937364):44.70%:MEM_RESERVE
最大的自由区域:基数0d8b1000 - 大小0010f000(1084 KB)
0:000>!EEHeap -gc
GC堆数:1
代0开始于0x425f776c
第1代开始于0x425f5a08
第2代开始于0x01881000
临时段分配上下文:无
段开始分配大小
01880000 01881000 0281ecf8 0x00f9dcf8(16375032)
12010000 12011000 12f83a04 0x00f72a04 (16198148)
1e0a0000 1e0a1000 1e734094 0x00693094(6893716)
41e80000 41e81000 427048d0 0x008838d0(8927440)
大对象堆从0x02881000
段开始分配大小
02880000 02881000 02a36958 0x001b5958(1792344)
13010000 13011000 137c0020 …
我必须在ThreadPool上运行一些代码作为单独的线程.
ThreadPool.QueueUserWorkItem(MyMethod,MyObjects);
Run Code Online (Sandbox Code Playgroud)
一旦MyMethod完成,我需要运行另一个方法MyMethod2.我怎样才能做到这一点?
我有一张下面的表格
CREATE TABLE MyTable
(
ID INTEGER DEFAULT(1,1),
FirstIdentifier INTEGER NULL,
SecondIdentifier INTEGER NULL,
--.... some other fields .....
)
Run Code Online (Sandbox Code Playgroud)
现在,FirstIdentifier和SecondIdentifier中的每一个都是唯一但可以为NULL的.我想在每个列上放置一个唯一的约束,但不能这样做,因为它的NULLable可以有两行,其中NULL值会使这些唯一约束失败.有关如何在架构级别上解决它的任何想法?
这个陈述有什么问题?当在LinqPad中运行语言设置为"C#Statement"时,我得到"; expect".
from p in Products where p.UnitPrice > 50 select new {p.ProductID };
Run Code Online (Sandbox Code Playgroud)
现在好像我将它分配给任何var; 我没有得到任何错误.但我觉得令人困惑的是下面的声明工作正常并给我结果,虽然我没有将它分配给任何变量.有任何想法吗?
from p in Products
let spanishOrders = p.OrderDetails.Where ( o=> o.Order.ShipCountry == "Spain")
where spanishOrders.Any()
group new
{
p.ProductName,
Orders = spanishOrders.Count(),
spanishOrders
}
by p.Category.CategoryName
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的不好实际上我不能运行第二个例子而不将其分配给变量.
如果我有一段代码可以做这样的事情.
try
{
...
}
catch(Exception ex)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
事实上,在catch块中我们只进行了抛出,我似乎无法找到这个特殊异常处理程序的任何优点.这个不必要的捕获导致代码流是否有任何性能问题?
可能重复:
C#'var'与特定类型性能
如果我写行,是否有任何性能成本(在类型转换方面等)
SqlConnection c = new SqlConnection(connectionString))
Run Code Online (Sandbox Code Playgroud)
如
var c = new SqlConnection(connectionString))
Run Code Online (Sandbox Code Playgroud) 尝试在Windbg中调试转储文件.它是一个托管与一些Microsoft本机库互操作.我已设置符号路径.sympath SRV*c:\ SymbolsCash*http://msdl.microsoft.com/download/symbols.
我没有任何问题加载SOS.我可以运行sos命令而不会出现任何错误.我也可以运行大部分Windbg命令(如〜,kb,.time等),但是对于某些命令(例如,!address -summary),我得到以下错误.
您的调试器未使用正确的符号
为了使此命令正常工作,您的符号路径
必须指向具有完整类型信息的.pdb文件.某些.pdb文件(例如公共OS符号)不
包含所需信息.
如果需要此命令,请与提供这些符号的组联系
.
引用类型:ntdll!_NT_TIB
我在这里缺少什么想法?
c# ×6
windbg ×3
sos ×2
wcf ×2
.net ×1
crash-dumps ×1
debugging ×1
installer ×1
linq ×1
linq-to-sql ×1
linqpad ×1
managed ×1
memory-leaks ×1
sql-server ×1
threadpool ×1
var ×1
wcf-client ×1
winforms ×1
wix ×1