我理解并欣赏.NET框架中System.WeakReference类的用处,但我对实现细节很好奇.
WeakReference是如何在.NET中实现的?MSDN详细讨论了WeakReference的用法,但是我已经看到了一些关于它如何工作的细节.
CLR如何跟踪引用并知道在收集目标时将内部句柄清空,而不会阻止GC?它是否需要CLR本身的特殊处理?
我主要担心的是,使用WeakReferences(特别是如果使用其中许多)与使用标准对象引用时的性能有关.
序列化浮点数和双精度数时,如果数字不包含任何小数部分,Json.NET总是在末尾添加".0".我想知道是否有一种简单的方法可以绕过这一点,从而产生更紧凑的表现形式?序列化包含许多数字的对象时,会出现额外的句点和零.
例如,运行此代码时:
JsonConvert.SerializeObject(1.0);
Run Code Online (Sandbox Code Playgroud)
我希望(并希望)这个结果:
"1"
Run Code Online (Sandbox Code Playgroud)
但相反,我得到:
"1.0"
Run Code Online (Sandbox Code Playgroud)
我查看了源代码并注意到它是故意添加在提交0319263("... - 修复JsonConvert总是写一个带小数位的浮点数......"),它运行的代码基本上看起来像:
private static string EnsureDecimalPlace(double value, string text)
{
if (double.IsNaN(value) || double.IsInfinity(value) ||
text.IndexOf('.') != -1 || text.IndexOf('E') != -1 ||
text.IndexOf('e') != -1)
{
return text;
}
return text + ".0";
}
Run Code Online (Sandbox Code Playgroud)
因此,我想知道:
可能是这种变化的原因是什么?的JSON规范似乎并不需要它.
是否有一种简单的方法可以绕过它?
ASP.NET 4.0 SQL会话状态机制是否与会话状态的ASP.NET 2.0架构向后兼容,还是应该/我们必须为ASP.NET 4.0应用程序创建一个单独且不同的会话状态数据库?
无论如何我倾向于后者,但2.0数据库似乎只是工作,但我想知道在2.0和4.0版本的ASP.NET之间ASPState数据库模式/过程之间是否存在任何实质性差异.谢谢.
所有SSL专家的问题:
我们有一个嵌入式设备,上面有一个小型Web服务器,我们可以在其上安装自己的SSL自签名证书.客户端是用.NET编写的(但这并不重要).
如何在.NET中验证设备?是否足以将证书的指纹与数据库中的已知条目进行比较?
我的理解是指纹是整个证书的散列,包括公钥.伪装成我的设备的设备当然可以发送相同的公共证书,但它无法知道私钥,对吧?
或者我是否必须建立自己的信任链,创建自己的CA根证书,签署Web服务器证书并在客户端上安装它?
当使用los foratter绑定一个mial消息时,我得到以下内容.
错误:Sys.WebForms.PageRequestManagerServerErrorException:序列化'System.Net.Mail.MailMessage'类型的值'System.Net.Mail.MailMessage'时出错.
是否有一种简单的方法来序列化这个对象,或者我是否需要单独地对每个ohhte属性进行分类?
我正在将文档扫描到JPG图像.扫描仪必须将所有页面扫描为彩色或将所有页面扫描为黑白.由于我的许多页面都是彩色的,我必须将所有页面扫描为彩色.扫描完成后,我想用.Net检查图像并尝试检测哪些图像是黑白的,这样我就可以将这些图像转换为灰度并节省存储空间.
有人知道如何使用.Net检测灰度图像吗?
请告诉我.
许可软件的最佳和最安全的方法是什么?这样做是否有现有的计划?我想出售我的剧本,但我想确保用户不能自己重新分发或出售(当然,如果他们在自己的计算机上停用注册并选择转售,这是他们的选择).
软件语言是VB.net.
由于我不确定我是否可以托管任何类型的注册数据库,有没有办法让许可证安全自给自足?我希望用户能够下载演示并能够以某种方式升级到完整版本.
谢谢您的帮助!
如果现在没有这样的软件可以做到这一点,我将如何制作一个?
无法为特定方案设置单元测试.这是我正在尝试的:
在Xcode 4.5中,我创建了一个简单的OSX "命令行工具"应用程序项目(Foundation).
请注意,Xcode 不提供自动将单元测试添加到"命令行工具"项目的选项 - 所以请不要建议勾选方框.它不存在: - /
在我的项目中,我创建了一个我想测试的简单示例类; 例如"形状".
我跟着苹果的指示Xcode的单元测试指南用于在项目设置的单元测试:
我在我的项目中添加了一个单元测试目标,并且
我编辑了"测试"方案以在新目标中运行测试.
在测试项目的实现(.m)文件中,我Shape.h
在setUp()
方法中添加了一个import 和code 来实例化一个形状并将其分配给一个实例变量.
那时,我决定看看是否会构建一些东西,以及默认测试是否仍会运行.但是,当我从菜单中选择Product ... Test时,构建失败并出现以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_Shape", referenced from:
objc-class-ref in ExampleTests.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
解释此错误不是问题.我知道单元测试目标没有链接到包含Shape实现的二进制文件.但是,我还没有(还)了解Xcode单元测试和目标配置.所以:
为了使测试目标链接到命令行工具的结果输出,我需要做什么?我可以链接到单元测试目标的命令行可执行文件吗?Apple的文档看起来特定于常规OSX应用程序(*.app
)和iOS应用程序,而这两者都不是.
我有业务逻辑类,我想在命令行工具设置(开始)中开发,所以我想了解我需要做什么才能在"命令行工具"中运行单元测试目标"项目类型. 谢谢!
(PS请注意,我不感兴趣,我的运行单元测试从命令行-堆栈溢出已经建议对如何做到这一点"相似"的问题-而是运行单元测试上一个"命令行工具"类型的项目,而且还来自Xcode内部.)
我正在尝试移植使用本机Sqlite3并大量使用的iOS应用程序SqliteDataReader
.在目标平台上,我使用SQLIte-Net(https://github.com/praeclarum/sqlite-net),并且SqliteDataReader类不存在.转换它的最佳选择是什么?读者的使用总是这样的代码:
SqliteConnection oConn = AppDelegateBase.MasterDatabase.CreateDBMSConnection();
using ( SqliteCommand oCmd = new SqliteCommand ( "SELECT * FROM ATable"), oConn ) )
using ( var oReader = oCmd.ExecuteReader ( ) )
{
while ( oReader.Read ( ) )
{
int val = Convert.ToInt32(oReader["someColumn"]);
}
oReader.Close ();
}
Run Code Online (Sandbox Code Playgroud) 我主要使用Visual Studio 2008进行Web开发,自从我在工作PC上升级到IE8后,似乎就出现了一种恼人的行为:
当我为网站或Web应用程序项目设置启动页面,然后单击工具栏中的"启动而不调试"图标或使用键盘快捷键CTRL-F5时,Visual Studio继续启动IE8(我的默认Web浏览器) ,但两次这样做:
IE8打开的第一个新窗口有一个标签"Connecting ...",它会加载about:空白页面.然后,另一个新的IE8窗口打开,同时显示"正在连接..."选项卡,并加载我在项目中设置的起始页面.
这非常烦人.有没有人有任何想法可能导致这个以及如何解决它?
在有人建议之前,我已经通过将Firefox作为我的默认浏览器来解决这个问题了一段时间;-)但是,我想在IE8中使用Visual Studio的javascript调试功能,所以再次想要IE8作为我的默认值,现在.
使用Process Explorer,我可以看到两个iexplore.exe进程都是由同一个父进程Visual Studio 2008的devenv.exe启动的.
第一个iexplore.exe进程具有以下命令行:
"C:\Program Files\Internet Explorer\IEXPLORE.EXE" -noframemerging -debug about:blank
几秒钟后启动的第二个iexplore.exe进程具有以下命令行:
"C:\Program Files\Internet Explorer\IEXPLORE.EXE" -noframemerging -suspended -debug http://localhost/test/index.html
然后,我也尝试了Process Monitor.在日志中,我可以在"C:\ Program Files\Internet Explorer\IEXPLORE.EXE"上看到来自devenv.exe的两个不同的"Process Create"事件......相隔几秒钟.
有趣的是,如果我使用Visual Studio 2005(而不是2008)尝试完全相同的事情(无需调试启动),我只会看到使用命令行创建的单个进程:
"C:\Program Files\Internet Explorer\IEXPLORE.EXE" about:blank
在2005年,在视觉上看起来好像是:空白首先被加载,然后URL被相同的选项卡中的相同浏览器进程加载:空白,覆盖它.
另外一件事我注意到不同:在VS2005 Process Monitor日志中,它显示了很多文件"C:\ WINDOWS\system32\ieframe.dll"的读取,但VS2008 Process Monitor日志中没有显示相同的内容.(ieframe.dll包含与Internet Explorer相关的某些COM对象的类型库.)因此,VS2005启动和控制IE的方式可能与VS2008不同.
最后,这很奇怪:在VS2008中,如果我单击"Start Without Debugging",我会得到两个窗口.但是,如果在解决方案资源管理器中我右键单击我的网站项目或其中的任何HTML文件并选择"在浏览器中查看",我只得到单个窗口.为什么"开始不调试"和"在浏览器中查看"之间存在差异?