小编dev*_*ium的帖子

如何将变量从一个应用程序域传递到另一个应用程序域

我想知道,如果我有一个变量,例如一个字符串,如何将其值传递给我的新app域:

static string _str;

static void Main(string[] args) {
    _str = "abc";
    AppDomain domain = AppDomain.CreateDomain("Domain666");
    domain.DoCallBack(MyNewAppDomainMethod);
    AppDomain.Unload(domain);
    Console.WriteLine("Finished");
    Console.ReadKey();
}

static void MyNewAppDomainMethod() {
    Console.WriteLine(_str); //want this to print "abc"
}
Run Code Online (Sandbox Code Playgroud)

谢谢

.net c# vb.net appdomain cross-domain

15
推荐指数
3
解决办法
1万
查看次数

将GC.AddMemoryPressure与非托管资源一起使用有什么意义?

我已经通过c#在MSDN和CLR上阅读了这个问题.

想象一下,我们分配了一个2Mb的非托管HBITMAP和一个指向它的8字节托管位图.使用AddMemoryPressure告诉GC有什么意义,如果它永远无法对该对象做任何事情,因为它被分配为非托管资源,因此不易受垃圾收集的影响?

.net c# vb.net garbage-collection

14
推荐指数
3
解决办法
8078
查看次数

将按钮的文本设置为在WPF中包含一些粗体字符

我想知道是否可以将其定义为ButtonWPF中的文本,例如:a b c

我试过设置 替代文字http://img651.imageshack.us/img651/1838/ctldhrzhy41gbrcch4dpjz4.png

但这似乎不起作用.

是否只能将Bold标签与FlowDocuments 一起使用?

谢谢

.net c# wpf styles button

14
推荐指数
2
解决办法
4万
查看次数

c#中的Java内部类

我有以下Java代码:

public class A {
    private int var_a = 666;

    public A() {
        B b = new B();
        b.method123();
        System.out.println(b.var_b);
    }

    public class B {
        private int var_b = 999;

        public void method123() {
            System.out.println(A.this.var_a);           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

产生666和999.现在,我已经尝试在c#中设置类似的代码,但似乎无法实现相同的功能.如果是这种情况,在c#编程时通常如何实现类似的效果?

c# java inner-classes

14
推荐指数
3
解决办法
3206
查看次数

使用测试驱动开发实现堆栈

我正在用TDD做我的第一步.问题是(可能每个人都以TDD开头),当我开始在我的项目中工作时,我从来不知道要做什么样的单元测试.

让我们假设我想用以下方法编写一个Stack类(我选择它,因为它是一个简单的例子):

Stack<T>
 - Push(element : T)
 - Pop() : T
 - Peek() : T
 - Count : int
 - IsEmpty : boolean
Run Code Online (Sandbox Code Playgroud)

你怎么会这样?我从来没有理解这个想法是为Stack类的每个方法测试一些极端情况,还是从类中做一些"用例"开始,比如添加10个元素并删除它们.这个想法是什么?要使使用Stack的代码尽可能接近我在实际代码中使用的代码?或者只是简单地"添加一个元素"单元测试,我测试IsEmpty和Count是否通过添加该元素进行了测试?

我该如何开始呢?

编辑

这是我粗略测试的实现:

    [TestMethod]
    public void PushTests() {
        StackZ<string> stackz = new StackZ<string>();

        for (int i = 0; i < 5; ++i) {
            int oldSize = stackz.Size;
            stackz.Push(i.ToString());
            int newSize = stackz.Size;
            Assert.AreEqual(oldSize + 1, newSize);
            Assert.IsFalse(stackz.IsEmpty);
        }
    }

    [TestMethod, ExpectedException(typeof(InvalidOperationException))]
    public void PeekTestsWhenEmpty() {
        StackZ<double> stackz = new StackZ<double>();
        stackz.Peek();
    }

    [TestMethod]
    public void PeekTestsWhenNotEmpty() …
Run Code Online (Sandbox Code Playgroud)

c# java tdd unit-testing

14
推荐指数
1
解决办法
1804
查看次数

什么是最优雅的lambda表达式(动作)什么都不做?

所以我目前有以下代码:

    BCLThread bclThread = new BCLThread(() => Thread.Sleep(0));
Run Code Online (Sandbox Code Playgroud)

因为我想不出另一种说法,我实际上不希望那种方法做某事.有没有其他更优雅的方式来实现这一目标?

谢谢

c# lambda anonymous-function

14
推荐指数
2
解决办法
3658
查看次数

在python中声明它们的主体之前是否可以使用函数?

在实际声明它们的主体之前,有没有办法在文件中使用函数?

以下代码似乎不起作用:

abc = myFunction

def myFunction():
    print "123"
Run Code Online (Sandbox Code Playgroud)

谢谢

python

13
推荐指数
2
解决办法
1万
查看次数

数据绑定到WPF中的方法

我无法将TextBox.Text属性数据绑定到对象的方法.这个想法是允许用户写TextBox一个文件名,然后TextBlock输出该文件的扩展名.

class GetFileInfo
{
    public string GetFileExtension(string fileName)
    {
        return Path.GetExtension(fileName);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的XAML:

<Window.Resources>
    <ObjectDataProvider x:Key="getFileInfo" MethodName="GetFileExtension" ObjectType="{x:Type local:GetFileInfo}">
        <ObjectDataProvider.MethodParameters>
            <sys:String>abc.text</sys:String>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>

<StackPanel>
    <TextBox Name="textBox1">
        <TextBox.Text>
            <Binding Source="{StaticResource getFileInfo}" Path="MethodParameters[0]" BindsDirectlyToSource="True" UpdateSourceTrigger="PropertyChanged" />
        </TextBox.Text>
    </TextBox>
    <TextBlock Name="textBlock1" Text="{Binding Source={StaticResource getFileInfo}}"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它没有做任何事情.任何可以指出可能是什么原因?这是我在设计师和运行应用程序时看到的内容:

替代文字http://img64.imageshack.us/img64/6922/f0rki14feo3oa3groxm5kgm.png

以下是我在运行时尝试设置其他文本时会发生的情况:

替代文字http://img684.imageshack.us/img684/1057/b52pnq1dm4i23qivizvpaqq.png 这是试图在运行时设置其他文本时去调试器给出的错误:

System.Windows.Data错误:8:无法将目标值保存到源.BindingExpression:路径= MethodParameters [0]; DataItem ='ObjectDataProvider'(HashCode = 2207369); target元素是'TextBox'(Name ='textBox1'); 目标属性是"文本"(类型"字符串")的ArgumentException:'System.ArgumentException:类型的对象'MS.Internal.Data.PropertyPathWorker + IListIndexerArg’不能被转换为类型'System.Int32’.在System.RuntimeType.TryChangeType(对象值,粘结剂粘结剂,CultureInfo的文化,布尔needsSpecialCast)在System.RuntimeType.CheckValue(对象值,粘结剂粘结剂,CultureInfo的文化,的BindingFlags invokeAttr)在System.Reflection.MethodBase.CheckArguments(对象[]参数,粘合剂粘合剂的BindingFlags invokeAttr,CultureInfo的文化,签名Sig)在System.Reflection.RuntimeMethodInfo.Invoke(对象OBJ,的BindingFlags invokeAttr,粘结剂粘结剂,对象[]参数,CultureInfo的文化,布尔skipVisibilityChecks)在System.Reflection.RuntimeMethodInfo.调用(对象OBJ,的BindingFlags invokeAttr,粘结剂粘结剂,对象[]参数,CultureInfo的培养)在System.Reflection.RuntimePropertyInfo.SetValue(对象OBJ,对象的值,的BindingFlags invokeAttr,粘结剂粘结剂,对象[]索引,CultureInfo的培养)在MS System.Windows.Data.BindingExpre上MS.Internal.Data.ClrBindingWorker.UpdateValue(Object value)的.Internal.Data.PropertyPathWorker.SetValue(Object item,Object value)ssion.UpdateSource(Object value)'

c# data-binding methods wpf

13
推荐指数
2
解决办法
2万
查看次数

如果访问共享内存的关键是shmget()的返回值,那么拥有key_t有什么意义呢?

使用共享内存时,我们为什么要关心创建密钥

key_t ftok(const char *path, int id);
Run Code Online (Sandbox Code Playgroud)

在下面的代码中?

key_t key;
int shmid;

key = ftok("/home/beej/somefile3", 'R');
shmid = shmget(key, 1024, 0644 | IPC_CREAT);
Run Code Online (Sandbox Code Playgroud)

根据我的理解,访问给定共享内存所需的是shmid,而不是密钥.还是我错了?如果我们需要的是shmid,每次不仅仅创建一个随机密钥有什么意义呢?

编辑

@ Beej的Unix IPC指南可以阅读:

key废话怎么样?我们如何创建一个?好吧,因为类型 key_t实际上只是一个long,你可以使用你想要的任何数字.但是如果你硬编码数字和其他一些不相关的程序硬编码相同的数字但想要另一个队列呢?解决方案是使用ftok() 从两个参数生成密钥的函数.

读到这一点,它给我的印象是,需要附加到共享内存块的关键是什么.但事实并非如此,是吗?

c unix shared-memory ftok

13
推荐指数
2
解决办法
2万
查看次数

Jvm本机代码编译疯狂 - 即使代码编译后,我似乎也遭受了一段时间的奇怪性能惩罚.为什么?

问题

在Java中使用简单的QuickSort实现进行基准测试时,我在n vs time绘制的图形中面临意外的突变:

在此输入图像描述

我知道HotSpot会尝试在某些方法被大量使用之后将代码编译为native.所以我运行了JVM -XX:+PrintCompilation.经过反复试验,它似乎总是以相同的方式编译算法的方法:

@ iteration 6 -> sorting.QuickSort::swap (15 bytes)
@ iteration 7 -> sorting.QuickSort::partition (66 bytes)
@ iteration 7 -> sorting.QuickSort::quickSort (29 bytes)
Run Code Online (Sandbox Code Playgroud)

我正在使用这些添加的信息重复上面的图形,只是为了让事情更清楚:

在此输入图像描述

在这一点上,我们都必须问自己:为什么在编译代码之后我们仍然会得到那些丑陋的驼峰?也许它与算法本身有关?肯定可以,幸运的是我们可以通过以下方式快速解决这个问题-XX:CompileThreshold=0:

在此输入图像描述

坏消息!它必定是JVM在后台执行的操作.但是什么?我推测,尽管代码正在编译,但可能需要一段时间才能实际开始使用编译代码.也许Thread.sleep()在这里添加几个可以帮助我们解决这个问题?

在此输入图像描述

哎哟! 绿色功能是QuickSort的代码运行,每次运行之间内部为1000ms(附录中的详细信息),而蓝色功能是我们的旧功能(仅用于比较).

在拳头上,给HotSpot留出时间似乎只会让事情变得更糟!也许它只是似乎由其他因素恶化,如缓存问题?

免责声明:我正在为显示的图形的每个点运行1000次试验,并System.nanoTime()用于测量结果.

编辑

在这个阶段,你们中的一些人可能想知道如何使用sleep()可能会扭曲结果.我再次运行Red Plot(没有本机编译),现在睡眠中间:

在此输入图像描述

害怕!

附录

在这里,我提供QuickSort我正在使用的代码,以防万一:

public class QuickSort {

    public <T extends Comparable<T>> void sort(int[] table) {
        quickSort(table, 0, table.length - 1);
    }

    private static <T extends Comparable<T>> void quickSort(int[] …
Run Code Online (Sandbox Code Playgroud)

java benchmarking jvm jvm-hotspot

13
推荐指数
1
解决办法
354
查看次数