有人问过像我这样的问题,但我的情况有点不同.现在的问题是,"为什么volatile关键字不允许C#在类型System.Double和System.Int64等?"
乍一看,我回答了我的同事,"好吧,在32位机器上,这些类型至少需要两个滴答才能进入处理器,.Net框架的目的是抽象出像这样的处理器特定细节. " 他回答说:"如果由于处理器特定的问题导致你无法使用某个功能,那么它就不会抽象出任何东西!"
他暗示一个特定于处理器的细节不应该出现在使用框架的人身上,这个框架"抽象"远离程序员的细节.因此,框架(或C#)应该抽象出那些并做它需要做的事情来提供相同的保证System.Double等等(无论是信号量,内存障碍还是其他).我认为框架不应该增加信号量的开销volatile,因为程序员不期望使用这样的关键字这样的开销,因为32位类型不需要信号量.64位类型的更大开销可能会让人感到意外,因此,更好的.Net框架只是不允许它,并且如果开销是可接受的,那么就可以在更大的类型上使用自己的信号量.
这导致我们调查volatile关键字的全部内容.(见本页).该页面在说明中说明:
在C#中,在字段上使用volatile修饰符可确保对该字段的所有访问都使用VolatileRead或VolatileWrite.
嗯..... VolatileRead并且VolatileWrite都支持我们的64位类型!! 那么我的问题是,
"为什么volatile关键字不允许
C#在类型System.Double和System.Int64等?"
我知道如何使用输入/输出变量和变量变量.我完全清楚使用输入/输出变量更好,因为它不被弃用.
这是一个非常小的事情,但我真的不明白为什么他们改变了这一点.以前我可以将代码放在一个着色器中,将其复制并粘贴到另一个着色器中,这样就可以了.现在我必须将它粘贴到另一个并将所有内容更改为"out"(而不是"in").
我不介意这样做,我只是对进/出变量是否有优势感到非常好奇,如果没有,为什么Khronos组会改变它.
如何从存储库中删除所有类型的文件?我正在使用
git filter-branch --index-filter 'git rm -rf --cached **/*.jar'
Run Code Online (Sandbox Code Playgroud)
无论是git都没有扩展globs,或者它没有**像我期望的那样扩展.
我正在尝试从一个字节数组创建一个双重托管数组.我目前有问题,但我想优化.这是我想要使用的一些代码:
private unsafe static double[] _Get_Doubles(byte[] _raw_data)
{
double[] ret;
fixed (byte* _pd = _raw_data)
{
double* _pret = (double*)_pd;
ret = (double[])*_pret; //FAILURE
}
}
Run Code Online (Sandbox Code Playgroud)
请让我知道如何处理这些问题.
-Aaron
当我在远程会话()中运行PowerShell时etsn {servername},我有时似乎无法运行Java进程,即使是最简单的:
[chi-queuing]: PS C:\temp> java -cp .\hello.jar Hello
Error occurred during initialization of VM
Could not reserve enough space for object heap
Run Code Online (Sandbox Code Playgroud)
Hello.jar是一个"你好,世界!" 应该只打印"Hello"到标准输出的应用程序.
所以,问题是,在PowerShell会话的另一端运行进程有什么特别之处吗?关于Java VM如何工作可能不允许这样的处理吗?内存是在远程计算机上分配的,对吧?以下是可用物理内存的读数:
[chi-queuing]: PS C:\temp> $mem = Get-wmiobject -class Win32_OperatingSystem
[chi-queuing]: PS C:\temp> $mem.FreePhysicalMemory
1013000
Run Code Online (Sandbox Code Playgroud)
但是,当我远程桌面到服务器并询问操作系统有多少可用内存时,它说270 MB物理内存可用.让我知道你的想法!
我希望能够将我的程序从控制台中分离出来wget -b.代码片段可能看起来像
static void Main(string[] args)
{
var settings = new Settings(args);
if (settings.Background)
{
/*Tell the user what's going on.*/
System.Console.WriteLine("Detatching from console. The program will still be running.");
System.Console.Out.Close();
}
/*do work then exit.*/
}
Run Code Online (Sandbox Code Playgroud)
但是System.Console.Out.Close();没有做正确的事.
为了澄清,"正确的事情"是,当从控制台运行此程序时,应该重新出现提示.或者,从中运行此程序时explorer.exe,控制台窗口应该关闭.
如果我不清楚,请告诉我.
我正在尝试通过Windows XP中的Powershell运行java进程.这是命令:
java.exe -cp .;./common.jar -Dcontext=atest1 -Dresourcepath=. DW_Install
Run Code Online (Sandbox Code Playgroud)
所以,类路径是.和.\ common.jar(我认为java采用了错误的斜杠,对吗?)有两个环境变量,一个是"atest1",另一个是"." 并且执行main的类是DW_Install(在默认包中).
此命令在cmd.exe中有效,但不是PS.这是怎么回事?什么是PS在解析CMD不执行此命令时所做的事情(反之亦然)?
亚伦
当我在工作时,在看起来不太随机的不同时间,窗户一直在移动! 这是我的 Visual Studio 布局的图片。它跨越两个屏幕,所以解决方案资源管理器在左侧屏幕的右侧,而代码窗口在右侧是全屏的。
发生这种情况时,解决方案资源管理器(以及停靠在它上面的所有其他窗口——属性和类视图)会移动。它们会改变大小和位置。它们的位置(左上角)移动到代码窗口右下角的某个位置,它们变得宽阔而矮小。
我的窗户在其他时候还有一个地方,特别是在它们大约 30-40 像素的位置的左侧。
我注意到,如果我按照我喜欢的方式设置所有内容,然后关闭 Visual Studio,然后打开 Visual Stuio,大多数事情都是我喜欢的方式。
正如我所说,有几种触发方式。具体来说,有时当抛出异常并且调试器必须捕获它们并显示非常小的异常框时。我会说大约 10% 或 20% 的时间,但这似乎不是完全随机的。一些异常,如果我多次运行程序,并且异常被 IDE 捕获,将可靠地导致工具栏中的这种跳转。这个基于异常的跳转总是(就我记得的那样)我描述的解决方案资源管理器的第一个跳转到代码窗口的右下角。
除此之外,有时当我启动 Visual Studio 时,窗口会进行我所说的第二次跳跃(左上 30 或 40 像素)。这个比较靠谱。事实上,如果我能启动 Visual Studio 并且窗口在我想要的地方,我就很高兴了。
最后,问题。是否有设置文件至少可以查看 Visual Studio 尝试放置工具栏的位置?我注意到,对于 Visual Studio 何时恢复、最大化和全屏,似乎有单独的设置,它可以记住并在适当的时间应用。
请帮助我使我的 IDE 更稳定!
我有一个很久以前创建的工作存储库,现在我正在尝试设置另一个,但我遇到了很大的困难。这是我为创建第二个所做的工作;我希望这能奏效:
U:\repos>svnadmin create repo1
U:\repos>echo password-db = passwd >> repo1/conf/svnserve.conf
U:\repos>echo auth-access = write >> repo1/conf/svnserve.conf
U:\repos>echo user1 = user >> repo1/conf/passwd
U:\repos>cd repo1
U:\repos\repo1>svnserve -d
Run Code Online (Sandbox Code Playgroud)
而在另一个终端:
U:\>mkdir wc
U:\>cd wc
U:\wc>svn co svn://localhost/repo1
svn: E210005: Unable to connect to a repository at URL 'svn://localhost/repo1'
svn: E210005: No repository found in 'svn://localhost/repo1'
U:\wc>
Run Code Online (Sandbox Code Playgroud)
另一个存储库以相同的方式配置在u:\repo。这是怎么回事?
我使用以下演示脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project name="test" basedir="." xmlns:deploy="antlib:net.sf.antcontrib">
<target name="default">
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<deploy:if>
<isset property="defaultprop"/>
<then>
<echo message="it's set!"/>
</then>
</deploy:if>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
当我运行这个构建脚本(带目标default)时,错误是
build.xml:9: Problem: failed to create task or type antlib:net.sf.antcontrib:if
Run Code Online (Sandbox Code Playgroud)
这个问题lib/ant-contrib-1.0b3.jar存在,蚂蚁正在捡起它.我在想问题是我如何使用xmlns.我从另一个我不具备的例子中得到这个(虽然它可以在特定的服务器上运行!),并试图找出魔法酱是什么.
通常,我使用以下方法编写可(优雅地)调整大小的表单。
using System.Drawing;
using System.Windows.Forms;
namespace silly
{
public class Form1 : Form
{
private GroupBox g;
private Button b1, b2;
public Form1()
{
Init();
}
private void Init()
{
//create and add controls.
this.Controls.Add(g = new GroupBox());
g.Controls.AddRange(new Control[] {
b1 = new Button(),
b2 = new Button()});
g.Text = "group";
b1.Text = "b1";
b2.Text = "b2!";
b1.AutoSize = b2.AutoSize = true;
g.Resize += new System.EventHandler(g_Resize);
}
private void g_Resize(object sender, System.EventArgs e)
{
b1.Size = b2.Size = new …Run Code Online (Sandbox Code Playgroud) 以下代码有错误:
class A
{
private final String val;
public A(){
this.val = null;
}
public A(String val){
this();
this.val = val;
}
}
Run Code Online (Sandbox Code Playgroud)
错误是“可能已经分配了变量 val
是否有解决此错误的方法,而无需重新编写可能在默认构造函数中的任何代码?这是一个最小的工作示例;如果你问自己“默认构造函数中有哪些代码”,请记住,一个真实的例子可能有很多你不想在其他构造函数中重复的代码(分配其他最终变量等)。
还请记住,这是一个最小的例子,同样的问题存在于大量的构造函数中。
java constructor variable-initialization constructor-chaining
java ×4
c# ×3
powershell ×2
.net ×1
ant ×1
ant-contrib ×1
arrays ×1
command-line ×1
console ×1
constructor ×1
controls ×1
git ×1
git-rm ×1
glsl ×1
groupbox ×1
managed ×1
opengl ×1
pointers ×1
process ×1
shader ×1
svn ×1
svn-checkout ×1
svnadmin ×1
svnserve ×1
toolbar ×1
unmanaged ×1
volatile ×1
winforms ×1