小编Kir*_*rst的帖子

使用方法的MethodHandle作为键来缓存无参数方法的结果是否安全?

在WCF客户端应用程序中,有许多无参数方法,我们希望将结果缓存 - GetAllFoo(), GetAllBar(). 这些用于填充下拉列表等,结果在客户端的运行期间不会改变.

这些结果当前由存储在资源文件中的唯一字符串缓存 - 例如,GetAllCountries()缓存在CountryKey资源上.仅当缓存不包含请求的密钥时才会调用该服务.

public T Get<T, V>(string key, Func<V, T> serviceCall, V proxy)
{
    if (!cache.Contains(key))
    {
        cache.Add(key, serviceCall(proxy));
    }   
    return cache.GetData(key) as T;
}
Run Code Online (Sandbox Code Playgroud)

这很好,除了我们需要维护资源文件中的密钥,并且需要确保每个方法都使用正确的缓存密钥,否则会中断.旧的Control + C,Control + V在这里引起一些麻烦,我不想去检查每个调用此方法的地方.

所以问题是:

serviceCall委托具有Method它属性描述要执行的方法.这是一个MethodInfo实例,它又包含一个MethodHandle属性.我是否正确地假设该MethodHandle属性唯一且一致地标识引用的方法?

我将包装器更改为

public T Get<T, V>(Func<V, T> serviceCall, V proxy)
{
    var key = serviceCall.Method.MethodHandle;
    // etc
Run Code Online (Sandbox Code Playgroud)

它正确地封装了缓存和关键问题,并消除了对调用者"做正确的事情"的任何依赖.

  • 不关心MethodHandle是否在实例之间发生变化 - 缓存仅适用于每个实例
  • 不关心MethodHandle是否在客户端之间不一致 - 每个客户端都有缓存
  • DO护理如果MethodHandle不是客户端上的实例中一致的-其实我是想使用高速缓存,而不是每个请求产生新的服务调用和缓存已满未使用的数据的
  • 注意MethodHandle在客户端的实例中是不唯一的 - 我必须确保在使用包装器时返回正确的数据(和类型).

.net c# reflection caching methodinfo

5
推荐指数
1
解决办法
277
查看次数

Objective-C上没有Smalltalk运行时功能?

我不太了解Smalltalk,但我知道一些Objective-C.而且我对Smalltalk很感兴趣.

它们的语法有很多不同,但基本的运行时结构(即功能)非常相似.运行时支持运行时功能.

我认为两种语言在这个意义上非常相似,但Smalltalk上有许多功能在Objective-C运行时没有.例如,thisContext它操纵调用堆栈.或者non-local return解除块执行.该block秒.它只在Smalltalk上,无论如何它现在也在Objective-C上实现.

因为我不是Smalltalk的专家,所以我不知道那种功能.特别适合高级用户.Smalltalk中仅提供哪些功能?基本上,我想知道Smalltalk的高级功能.所以在Objective-C上已经实现的功能就可以了block.

language-features smalltalk objective-c

5
推荐指数
1
解决办法
921
查看次数

如何将嵌入的图像资源分配给XAML中的图像控件

我是WPF的新手.如何使用XAML在WPF中使用嵌入式资源图像进行图像控制?

wpf xaml

5
推荐指数
1
解决办法
5386
查看次数

使用Athena指定压缩类型

我有S3数据,它有GZIP压缩.我正在尝试使用此文件在Athena中创建一个表,并且我的CREATE TABLE语句成功 - 但是当我查询表时,所有行都是空的.

create external table mydatabase.table1 (
   date date,
   week_begin_date date,
   week_end_date date,
   value float
)
row format delimited fields terminated by ','
stored as inputformat 'org.apache.hadoop.mapred.TextInputFormat'     
outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location 's3://my-bucket/some/path/'
Run Code Online (Sandbox Code Playgroud)

我怎么能坚持雅典娜把我的文件读成GZIP

hive amazon-athena

5
推荐指数
1
解决办法
2387
查看次数

如何从其DataProvider对象中获取Flex Spark List的ItemRenderer?

在Flex中,我可以创建一个ItemRenderer来表示Lists DataProvider中的每个项目,但是如何通过DataProviders对象访问ItemRenderer的实例?就像是myList.getItemRenderer(dp.getItemAt(10));

apache-flex itemrenderer dataprovider flex-spark

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

使用实体框架将更改保存回数据库

我有简单的查询,将两个表中的数据加载到GUI中.我正在将加载的数据保存到广泛可用的对象中Clients currentlySelectedClient.

using (var context = new EntityBazaCRM()) 
{
   currentlySelectedClient = context.Kliencis.Include("Podmioty").FirstOrDefault(d => d.KlienciID == klientId);
   if (currentlySelectedClient != null) 
   {
      textImie.Text = currentlySelectedClient.Podmioty.PodmiotOsobaImie;
      textNazwisko.Text = currentlySelectedClient.Podmioty.PodmiotOsobaNazwisko;
   } 
   else 
   {
      textNazwa.Text = currentlySelectedClient.Podmioty.PodmiotFirmaNazwa;
   }
}
Run Code Online (Sandbox Code Playgroud)

所以现在如果我想:

1)保存用户所做的更改我该怎么做?我是否必须在数据库方面准备一些东西?如何处理修改多个表(某些数据在这里,有些数据在那里)?我现在的代码好像写了.KlienciHaslo就好了,但它根本不影响Podmioty.我尝试了不同的组合,但没有运气.

2)将新客户端添加到数据库(并将信息保存到相关表)?

    currentClient.Podmioty.PodmiotOsobaImie = textImie.Text;  // not saved
    currentClient.Podmioty.PodmiotOsobaNazwisko = textNazwisko.Text; // not saved
    currentClient.KlienciHaslo = "TEST111"; // saved

    using (var context = new EntityBazaCRM()) 
    {
        var objectInDB = context.Kliencis.SingleOrDefault(t => t.KlienciID == currentClient.KlienciID);
        if (objectInDB != null) 
        {
           // context.ObjectStateManager.ChangeObjectState(currentClient.Podmioty, EntityState.Modified); …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework winforms entity-framework-4

4
推荐指数
1
解决办法
9607
查看次数

WCF OperationContract具有松散类型的参数

我想在我的Web方法中使用松散类型的参数.

我有一个场景,客户端可以将任何25个DataContract对象发送到WCF操作,例如

proxy1.myFunction(PersonObject)
proxy1.myFunction(ComputerObject)
Run Code Online (Sandbox Code Playgroud)

我的限制是应该只有一个操作合同暴露给客户.

如何设计一个可以将25个DataContract类中的任何一个作为参数的Web方法?我尝试使用objectas类型的参数并赋予KnownTypeDataContract类属性,但在序列化过程中我没有运气.

c# wcf operationcontract

4
推荐指数
1
解决办法
2829
查看次数

如何正确包装Dictionary <T,U>并公开枚举器?

我在我的对象中封装了一个Dictionary.我如何公开IEnumerable>?

之前

class HashRunningTotalDB : Dictionary<int, SummaryEntity>
{
         /... 
} 

// WORKS!
static void Main ()
{
       HashRunningTotalDB  tempDB = new HashRunningTotalDB();
       //todo: load temp DB

       foreach(var item in tempDB)
       {
           Console.Writeline(item.Key + " " + item.Value.SomeProperty);
       }
}
Run Code Online (Sandbox Code Playgroud)

class HashRunningTotalDB : IEnumerable
{
    Dictionary<int, SummaryEntity> thisHashRunningTotalDB = new Dictionary<int, SummaryEntity>();

      //QUESTION:  HOW DO I IMPLEMENT THE GENERIC ENUMERATOR HERE?
    // The following doesn't behave the same as the previous implementation
     IEnumerator IEnumerable.GetEnumerator()
    {
        return thisHashRunningTotalDB.GetEnumerator();
    }


    // The …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable inheritance dictionary encapsulation

4
推荐指数
1
解决办法
2127
查看次数

AWS Glue无法访问输入数据集

我在Glue / Athena中注册了一个数据集,称为my_db.table。我可以通过Athena来查询它,而且一切似乎都井井有条。

我正在尝试在Glue作业中使用此表,但收到以下相当不透明的错误消息:

py4j.protocol.Py4JJavaError: An error occurred while calling o54.getCatalogSource.
: java.lang.Error: No classification or connection in my_db.table
Run Code Online (Sandbox Code Playgroud)

这似乎表明Glue无法看到我的表的目录条目,或者无法使用该条目中的信息,但是我没有其他的可见性。

有谁遇到过此错误,可能是什么原因引起的?

amazon-web-services pyspark amazon-athena aws-glue

4
推荐指数
1
解决办法
1988
查看次数

雅典娜分区位置

我可以使用

show partitions my_table
Run Code Online (Sandbox Code Playgroud)

我可以通过使用查看分区的位置

describe formatted my_table partition (partition_col='value')
Run Code Online (Sandbox Code Playgroud)

但是我有很多分区,describe formatted如果可以避免的话,我不想解析输出。

有没有办法在单个查询中获取所有分区及其位置?

hive presto amazon-athena

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